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



我使用模板来推断所需的静态数组长度。头文件如下所示:

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值分配给头文件中的另一个变量来做到这一点。我该怎么做?

您不能将模板分为头文件和源文件,整个事情需要在头文件中实现。如果你想知道为什么,你可以阅读这个问题。所以你需要在头文件中实现整个事情:

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:来明确说明属性和方法是公共的还是私有的。默认情况下,它们始终是私有的。

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

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

最新更新