我想知道是否可以创建一个结构,并使用结构中初始化的成员/变量作为参数来构建其他成员。例如,我想制作一个结构:
struct myStruct {
size_t length;
std::string (&strings)[length]; // from the above variable
};
类似这样的事情。我知道初始化顺序有一些微妙之处,但我确信可以解决一些问题(也许是构造函数?)来克服这个问题。目前,我发现唯一有效的方法是模板:
template <size_t N>
struct myStruct {
int length;
std::string (&strings)[N]; // from the template parameter
};
请记住,我实际上将 length
值作为结构中的成员变量传递,因此理想情况下我不需要模板。
编辑:
澄清:我只需要访问数组字符串并能够从它们中读取(不需要覆盖它们,因此可以而且应该使用 const),就像使用常规数组一样:[基于] 的表示法。我也可以容忍对 std::array
的更改。无论如何,我只需要以与常规用法没有明显不同的方式轻松访问字符串。此外,它必须来自结构指针(也称为箭头运算符)。
非常感谢!
最佳答案
您不得使用
struct myStruct {
size_t length;
std::string (&strings)[length];
};
自 length
不是编译时间常数。
您最好的选择可能是使用 std::vector<std::string>&
.
struct myStruct {
// Assuming you were using a reference on purpose.
std::vector<std::string>& strings;
};
并在构造函数中对其进行初始化。
struct myStruct {
myStruct(std::vector<std::string>& in) : strings(in) {}
std::vector<std::string>& strings;
};
如果在编译时已知数组的大小,则有几种选择。
使用
std::string
的常规数组s。template <size_t N> struct myStruct { int length; std::string (&strings)[N]; };
使用
std::array
的std::string
s。template <size_t N> struct myStruct { int length; std::array<std::string, N>& strings; };
第二个选项更好,因为 std::array
s 拥有常规数组所具有的一切以及更多。
关于c++ - 使用其他成员初始化结构体的成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51866316/