【发布时间】:2021-08-21 22:17:55
【问题描述】:
我想知道是否可以使用向量作为向量的初始化列表。所以,如果我有
struct somedata{
string str1;
string str2;
}
struct moredata{
string str1;
string str2;
string str3;
}
template<class Dataholder>
Dataholder queryUser(args){
auto vec = get_vector_from_user(args)
Dataholder dat{vec}; // The elements of vec become the structured variables in dat.
return dat;
}
因此,当调用get_vector_from_user() 时,用户可能会输入 2 或 3 个字符串。但是,我知道程序员将始终以queryUser 为模板,并且vec 中的元素数量与Dataholder 模板中的字符串数量相同。是否可以使用向量的成员初始化结构?谢谢!
【问题讨论】:
-
编写一个接受向量的构造函数并相应地初始化成员
-
@Slava 好吧,没错,但我想 OP 想要一个内置的语言功能,类似于迭代器对等的向量初始化。
-
这有点像 C++(与 Java 或 C# 相对)等非反射语言在自动序列化方面的问题。没有内置方法可以“枚举”任意类的成员。
-
另外,您的数据类的外观让我怀疑您应该在每个类中使用向量或数组;如果你这样做,该语言会为你提供更多支持,以从其他容器初始化构造函数中的元素:容器中的元素 are 可枚举。
-
为什么
get_vector_from_user返回的是std::vector而不是std::array?
标签: c++ vector struct initialization