我有一个wrapper
包装 std::vector<int>
的类数据成员。我想要wrapper
的构造函数将其参数转发到 vector<int>
的 Actor 。我尝试使用可变模板构造函数来实现这一点。自 std::vector<int> v{1, 2, 3}
由其 std::initializer_list
构建医生,我想要wrapper
激活vector
的initializer_list
当我这样做的时候
wrapper mywrap{1, 2, 3}
.
但我没有得到想要的结果:
#include <iostream>
#include <vector>
struct wrapper {
std::vector<int> v;
template <typename ...Tn> wrapper(Tn ...args) : v(args...) {}
};
int main() {
//----Output----
wrapper wrap1{ 1 };
std::cout << wrap1.v.size() << std::endl; // 1
std::cout << wrap1.v.at(0) << std::endl; // 0
wrapper wrap2{ 1, 2 };
std::cout << wrap2.v.size() << std::endl; // 1
std::cout << wrap2.v.at(0) << std::endl; // 2
wrapper wrap3{ 1, 2, 3 }; // error
wrapper wrap4{ std::initializer_list<int>{ 1, 2, 3 } }; // OK
}
输出显示:
wrapper wrap1{ 1 };
来电 explicit vector (size_type n);
.
wrapper wrap2{ 1, 2 };
来电
vector (size_type n, const value_type& val, const allocator_type& alloc = allocator_type());
.
wrapper wrap3
当 initializer_list<int>
时失败未指定。
在所有情况下,我都想要 vector
的initializer_list<int>
要激活的ctor。如何解决这个问题?
最佳答案
()
初始化和 {}
初始化之间存在差异,在构造函数中您还应该使用 {}
初始化。
template <typename ...Tn> wrapper(Tn ...args) : v{args...} {}
顺便说一句,如果您只想要 initializer_list
c-tor,为什么不简单地编写这个 c-tor?
wrapper(std::initializer_list<int> args) : v(args) {}
关于c++ - 如何使包装类将其构造函数参数转发给 std::vector 的构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20659444/