繁体   English   中英

参数化 C++ 嵌套结构数组初始化

[英]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 个问题。

问题 1

您缺少右括号和分号}; 对应于结构A 要解决这个问题,只需添加}; 对应于结构A ,如下所示。

问题 2

T模板类型参数,因此不能用于指定数组的大小。 解决此问题的最简单方法是将T作为模板非类型参数,如下所示。

问题 3

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM