访问函数,它将std :: variant作为任意数量的回调并匹配变体的一个变量

时间:2017-03-19 07:22:06

标签: c++ visual-studio-2017 variant visitor

我已经尝试了一段时间,但我无法让它发挥作用。

在Visual Studio 2017中,如何创建“访问”#39;获取std :: variant和任意数量的回调的函数,并使用提取的变量值调用正确的回调函数。

这些是我希望实现的目标:

  • 访问将采用变体和一个或多个回调。
  • 只会调用与当前变量值匹配的回调。
  • 如果没有匹配的功能,则不会调用任何内容。
  • 编译器在编译时选择回调,而不是运行时。
  • 如果传递了一个回调,其param与任何变种类型都不匹配,那么是否存在编译错误。
  • 奖励:支持不带参数的回调,如果没有匹配则调用。

调用代码如下:

// std::monostate represents nil value.
using VarT = std::variant<std::monostate, bool, int_t, double, std::string_view>;
VarT var = ...

Visit(var,
    [](int_t) {},
    [](std::string_view) {},
    // [](Foo&), // Is ok if this gives error, as Foo is not a type in VarT
    []() {} // Bonus: the default case, if var is not an int_t or a string_view
);

那里有例子 - &gt; http://en.cppreference.com/w/cpp/utility/variant/visit, 但Visual Studio 2017不支持执行此操作所需的一些新功能。

0 个答案:

没有答案