[英]parameterized C++ nested struct array initialization
我在这里查看了可以使用模板进行嵌套结构的帖子。 但是,当我尝试在嵌套结构中初始化数组时,初始化期间似乎存在问题。 在下面的示例中,数组大小是嵌套结构的参数之一,因此 Visual Studio 抱怨数组大小是非法的。 这是定义:
//template<typename U, typename T>
template<typename U, size_t T> // this line also not work
struct A {
struct B {
struct C {
vector<U> count[T]; // count needs to have variable size
C() {
count = new U[T]; // allocate size. Not work
}
C c;
};
B b;
};
使用模板并初始化数组时我做错了什么吗?
谢谢
您当前的代码存在 3 个问题。
您缺少右括号和分号};
对应于结构A
。 要解决这个问题,只需添加};
对应于结构A
,如下所示。
T
是模板类型参数,因此不能用于指定数组的大小。 解决此问题的最简单方法是将T
作为模板非类型参数,如下所示。
count
在您的示例中是一个向量数组,因此count = new U[T];
没有意义。 查看您的评论,您试图将count
创建为具有U
类型和大小T
的元素的向量,可以如下所示完成。
另外,请注意我们不能有C c;
在类类型C
中,同样我们不能有B b;
里面B
。 这是因为我们不能在类中拥有不完整类型的非静态数据成员。
//-------------------vvvvvvvvvvv---->nontype parameter
template<typename U, std::size_t T>
struct A {
struct B {
struct C {
std::vector<U> count; //count is a std::vector
C(): count(T) {
std::cout<<"size of count vector is: "<<count.size()<<std::endl;
}
//C c;//this won't work here as C is INCOMPLETE at this point
};//--------->C is complete after this point
C c; //THIS WORKS HERE because C is COMPLETE at this point
// B b;//this wont work here as B is INCOMPLETE at this point
};//------------->B is complete after this point
B b; //THIS WORKS HERE because B is INCOMPLETE at this point
};//added this
使用模板并初始化数组时我做错了什么吗?
是的,你确实count = new U[T];
,但count
不是指针。
如果您希望将vector
初始化为具有大小T
,请在成员初始化程序列表中将T
提供给vector
的构造函数:
template<typename U, size_t T>
struct A {
struct B {
struct C {
std::vector<U> count;
C() : count(T) {} // now `count´ is constructed with `T` elements
}; // <- you are also missing this line
C c;
};
B b;
};
如果你真的想要一个固定大小的T
vector<U>
数组:
#include <array>
template<typename U, size_t T>
struct A {
struct B {
struct C {
std::array<std::vector<U>, T> count;
};
C c;
};
B b;
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.