c++ - 模板容器类被认为是 "scalar"?

标签 c++ templates

我有一个模板类,它是一个简单的 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 和聚合的定义。

一旦您了解了这些定义,您就会知道如何制作您的类(class) POD(如果您愿意的话)。

但是,在 C++11 中,您可以使用 {}初始值设定项,但你使用了 std::initializer_list<T>作为构造函数的参数类型。然后你可以使用{}即使对于不是 POD 和聚合的类型也是如此!

关于c++ - 模板容器类被认为是 "scalar"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8370018/

相关文章:

c++ - UnitTest++ 问题 : Trying to use a Predicate that has state

c++ - 如何在派生对象数组上使用析构函数?

c++ - 使用 cv::undistort 取消扭曲和居中图像

php - 银条3.1 : Link to page of data object from inside loop

C++ 编码逻辑 - 各种想法

c++ - 仅使用整数计算两条线的交点

python - 在机器人框架中定义包含变量的关键字

templates - Sinatra viarackup 不喜欢内联模板

django - 如何在 Django 模板上使用 if/else 条件?

c++ - 在模板类实现中分离 .h 和 .cpp 文件