我有一个wrapper
包装std::vector<int>
数据成员的类。我希望wrapper
的构造函数将其参数转发给vector<int>
的ctor。我试图使用可变参数模板构造函数来实现这一点。由于std::vector<int> v{1, 2, 3}
是由其std::initializer_list
ctor构造的,因此我希望在wrapper
执行时激活vector
的initializer_list
ctor
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) {}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句