构造函数定义中类声明的模板值

时间:2017-08-23 09:03:47

标签: c++ c++11 templates

我使用模板推导出所需的静态数组长度。头文件看起来像:

template<uint8_t LENGTH>
class Foo
{
   int array[LENGTH];
   Foo();
}

我想在cpp文件中的构造函数定义中使用LENGTH值,有点类似于:

Foo::Foo()
{
   for(uint8_t i = 0; i < LENGTH; i++)
   {
      //do_stuff
   }
}

到目前为止,我已经通过将LENGTH值分配给头文件中的另一个变量来完成此操作。我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

您无法将模板分成头文件和源文件,整个过程需要在头文件中实现。如果您想知道原因,可以阅读this question。所以你需要在头文件中实现整个事情:

template<uint8_t length>
class Foo{
private:
    int array[length];

public:
    Foo(){
        for(uint8_t i = 0; i < length; i++){
            //do_stuff
        }
    }
};

如果您这样做,则在构造函数中使用length时不会遇到任何问题。

另请注意,您忘记了类定义末尾的;。这是一个可能导致编译器错误的错误。此外,最好只为宏使用完全大写的名称,因此我将其称为length而不是LENGTH。我还建议您通过添加public:private:明确说明属性和方法是公开的还是私有的。默认情况下,他们始终是私密的。

答案 1 :(得分:0)

要在C ++ 11中迭代整个数组,只需使用:

for(auto &it: array){
    // do stuff
}