【发布时间】:2019-12-17 08:51:05
【问题描述】:
可能是愚蠢的问题:我正在尝试执行以下操作
template<unsigned int N>
class Foo{...}; // Define class Foo accordingly
int main(){
for (unsigned int i = 0; i < 10; i++){
Foo<i> f(3);
f.show();
}
return 0;
}
正如您想象的那样,它不会编译,因为变量 i 不是 const。我知道这样做的原因是在非类型模板参数Foo<i> 中分配的值必须在编译时知道,因为这里不是这种情况,所以它真的不知道该怎么做。现在,我想知道是否有办法克服这个问题。当然,第一个想法是将unsigned int N 声明为Foo 类的成员变量。
所以问题:是否可以使用模板参数实现上述所需的行为,还是我必须将unsigned int N 声明为我的类的成员变量?
P.S.:我试图找到一个相关的问题,但我发现的问题与如何使用非类型模板参数有关,他们并没有完全回答这个问题。由于他们没有提到这是可能的,我认为这是不可能的......
编辑。
是否可以做到以下几点?
template<unsigned int N>
class Foo{...}; // Define class Foo accordingly
int main(){
std::vector<Foo> v; // I know it's better with shared_ptr, etc.. but to get the idea..
for (unsigned int i = 0; i < 10; i++){
Foo<i> f(3);
f.show();
v.push_back( f );
}
return 0;
}
【问题讨论】:
-
@Evg 抱歉,不是故意的。谢谢你说清楚。
-
@JeJo,试图找到那个。感谢您找到它!仍然没有回答容器问题。