Effective C++ 44. Factor parameter-independent code out of templates

来源:互联网 发布:djay pro 破解版 mac 编辑:程序博客网 时间:2024/06/07 16:39
template<typename T, std::size_t n>class squareMatrix {public:    void invert();};
squareMatrix<double, 5> sm1;sm1.invert();squareMatrix<double, 10> sm2;sm2.invert();

two copies of invert will be instantiated here. This is a classic way for template-induced code bloat to arise.

template<typename T>class SquareMatrixBase{protected:    SquareMatrixBase(std::size_t n, T *pMem): size(n), pData(pMem) { }    void setDataPtr(T* ptr) { pData = ptr; }private:    std::size_t size;    T *pData;};template<typename T, std::size_t n>class SquareMatrix: private SquareMatrixBase<T> {public:    squareMatrix(): SquareMatrixBase<T>(n, data) {}private:    T data[n*n];};

put the data for each matrix on the heap

template<typename T, std::size_t n>class SquareMatrix: private SquareMatrixBase<T> {public:    SquareMatrix(): SquareMatrixBase<T>(n, 0), pData(new T[n*n]) {    this->setDataPtr(pData.get());    }private:    boost::scoped_array<T> pData;};

These functions use the “this->” notation, because function names in templatized base classes are hidden from derived classes.
但是在vs2017 中没有 “this->” 也是可以编译通过的。

阅读全文
0 0
原创粉丝点击