【发布时间】:2018-08-15 20:56:37
【问题描述】:
我想知道是否可以创建一个结构,并使用在结构中初始化的成员/变量作为参数来构建其他成员。比如我想做一个结构体:
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。无论如何,我只需要以与常规用法没有明显不同的方式轻松访问字符串。此外,它必须来自 结构指针(也称为箭头运算符)。
非常感谢!
【问题讨论】:
-
不幸的是,您为您的问题选择了一个不好的例子。一般来说,您的问题的答案是肯定的,但在您的具体示例中它不是,因为数组的长度必须是编译时间常数。另外,我不确定您期望
std::string (&strings)[N]是什么,但如果它是一个引用数组,那么这也是非法的。 -
@NathanOliver 字符串数组?我需要能够通过
((struct myStruct *) structptr->strings)[15]或类似的指针来使用该特定的结构成员。我不太熟悉。 -
如果你想要一个字符串数组,你应该使用
std::array<std::string, SIZE>- 注意这里没有引用。 -
哦,你想要一个字符串数组的引用,明白了。我在想你正在尝试对字符串进行引用。
-
而且,如果您想要对字符串数组的引用,请记住,虽然允许,但将引用作为类成员,但不一定是最好的主意。使用(非拥有)指针可能会更好
标签: c++ struct constructor initialization parameter-passing