我使用模板推导出所需的静态数组长度。头文件看起来像:
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
值分配给头文件中的另一个变量来完成此操作。我怎么能这样做?
答案 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
}