如何访问兼容的std::variant变体?


#include <variant>

struct A
{
void foo(){}
};

struct B
{
void foo(){}
};
int main()
{
std::variant< A, B > v{ A{} };
v.foo();  // doesn't work
}

我如何使用std::variant值不知道它的类型,但知道它的属性?我想这就是所谓的泛型多态性等价于Duck Typing。

完全有效的用例。我想有很多方法可以做到这一点,但这里有一个:

std::visit([](auto&& val) { val.foo(); }, v);

演示你的初始代码不起作用的原因是A::fooB::foo无关,所以要交替使用它们,你需要一个上下文,其中类型"包含"推导出一个foo成员。在visit示例中,我们通过将可调用对象设置为泛型lambda来创建这样一个上下文。

相关内容

  • 没有找到相关文章

最新更新