我有一个模板类,它是一个简单的 vector ,但这段代码拒绝编译:
template<int t>
struct Vector {
int pos[t];
Vector(int other[t]) {
for (int i = 0;i < t;++i) {
pos[i] = other[i];
}
}
};
Vector<3> cake = {3,4,5};
这是错误:
Line 11: error: scalar object 'cake' requires one element in initializer
compilation terminated due to -Wfatal-errors.
为什么这行不通?让它像这样工作的最简单方法是什么?
编辑:
这也行不通:
Vector<3> cake({3,4,5});
这不是应该调用带有签名 Vector<3>(int[3])
的构造函数吗? ?
最佳答案
在C++03中,{}
的初始化形式仅允许聚合(也包括 POD)。
代码中的类模板不是POD,也不是聚合。在这里阅读我的回答以了解 POD 和聚合的定义。
- Can't C++ POD type have any constructor?
- What is assignment via curly braces called? and can it be controlled?
一旦您了解了这些定义,您就会知道如何制作您的类(class) POD(如果您愿意的话)。
但是,在 C++11 中,您可以使用 {}
初始值设定项,但你使用了 std::initializer_list<T>
作为构造函数的参数类型。然后你可以使用{}
即使对于不是 POD 和聚合的类型也是如此!
关于c++ - 模板容器类被认为是 "scalar"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8370018/