模板类复制构造函数

时间:2015-12-16 11:24:07

标签: c++ templates copy-constructor

我想为模板类编写复制构造函数。我有这门课:

template<int C>
class Word {
    array<int, C> bitCells; //init with zeros
    int size;

public:
    //constructor fill with zeros
    Word<C>() {
        //bitCells = new array<int,C>;
        for (int i = 0; i < C; i++) {
            bitCells[i] = 0;
        }
        size = C;
    }
    Word<C>(const Word<C>& copyObg) {
        size=copyObg.getSize();
        bitCells=copyObg.bitCells;
    }
}

我有复制构造函数的错误,在使用大小的行上,我得到: “这条线上有多个标记      - 传递'const Word&lt; 16&gt;'作为'int Word :: getSize()[with int C = 16]的'this'参数'丢弃限定符[ -      fpermissive]      - 无效的参数'候选者是:int getSize()'“

这有什么问题? 谢谢

2 个答案:

答案 0 :(得分:3)

我会写这样的课:

template <std::size_t N>
class Word
{
    std::array<int, N> bit_cells_;

public:
    static constexpr std::size_t size = N;

    Word() : bit_cells_{} {}

    // public functions
};

注意:

  • 不需要动态尺寸,因为它是该类型的一部分。

  • 不需要特殊的成员函数,因为隐式定义的函数很好。

  • 通过constructor-initializer-list将成员数组初始化为零。

  • 模板参数是无符号的,因为它代表一个计数。

答案 1 :(得分:0)

错误的是您的getSize()未被声明const。这样做:

int getSize() const { return size; }