phi*_*inz 5 c++ constructor std-variant
我有两个结构A1,A2另一个结构B有两个结构的构造函数。如何编写 的委托构造函数std::variant<A1,A2>?
#include <variant>
struct A1 {};
struct A2 {};
using A = std::variant<A1, A2>;
struct B {
B(const A1 &){}
B(const A2 &){}
B(const A& a)
:B(a) // <--- what do I put here to delegate like std::visit ?
{}
};
int main(int argc, char *argv[]) {
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种本着 的精神的干净的现代方式std::visit。B我知道我可以使用静态成员函数通过Ausing和 lambda构造实例std::visit,但这不是我所要求的,因为我想依赖从A到 的隐式类型转换B。
小智 4
如果您可以使用复制构造函数,则可以执行此操作(不可扩展,但在这种情况下可以工作):
struct B {
B(const A1 &){}
B(const A2 &){}
B(const A& a)
: B((a.index() == 0) ? B(std::get<0>(a)) : B(std::get<1>(a)))
{}
};
Run Code Online (Sandbox Code Playgroud)
std::visit 的替代方案:
struct B {
B(const A1 &){}
B(const A2 &){}
B(const A& a) :
B(std::visit([](const auto & x)
{
return B(x);
},a))
{}
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
111 次 |
| 最近记录: |