我有struct
这样的:
struct A
{
int a;
std::variant<int, float, char> b;
A() = default;
};
我想添加一个构造器,该构造器将同时初始化a
和b
。看来我必须写一个构造函数中的所有类型b
一样A::A(int a1, int b1)
,A::A(int a1, float b1)
等等。
有办法避免这种情况吗?
您可以为您的类创建一个模板化的构造函数,并且最好使用完美的转发将其参数传递给variant
member的构造函数:
template <typename T>
A::A(int i, T&& t) : a(i), b(std::forward<T>(t)) { }
然后,您可以编写,例如:
A obj1(1, -7.4f); // float variant member
A obj2(2, 7); // int variant member
A obj3(3, 'c'); // char variant member
不会涉及不必要的移动/副本/临时工作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句