我想知道是否可以创建一个结构,并使用在结构中初始化的成员/变量作为参数来构建其他成员。例如,我想构建一个结构:
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
的更改。无论如何,我只需要以与常规用法完全不同的方式容易地访问字符串。另外,它必须来自结构指针(又称箭头运算符)。
非常感谢!
答案 0 :(得分:5)
您不得使用
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
。
template <size_t N>
struct myStruct {
int length;
std::array<std::string, N>& strings;
};
第二个选项更好,因为std::array
具有常规数组所具有的所有功能以及更多功能。