Factor parameter-independent code out of templates.
template<typename T, std::size_t n>
class SquareMatrix {
public:
...
void invert();
};
SquareMatrix<double, 5> sm1;
SquareMatrix<double, 10> sm2; // 具现化出两个 SquareMatrix
template<typename T>
class SquareMatrixBase> {
protected:
...
void invert(std::size_t matrixSize);
...
};
template<typename T, std::size_t n>
class SquareMatrix: private SquareMatrixBase<T> {
private:
using SquareMatrixBase<T>::invert;
public:
void invert() { this->invert(n); }
};
对于因类型参数(type parameters)而造成的代码膨胀,往往可以降低,例如用基类中的指针记录数据存放的位置,替代了每次向 derived class 询问的操作:
template<typename T>
class SquareMatrixBase> {
protected:
SquareMatrixBase(std::size_t n, T* pMem): size(n), pData(pMem) { }
void setDataPtr(T* ptr) { pData = ptr; }
void invert(std::size_t matrixSize);
...
private:
std::size_t size;
T* pData;
};