这个问题在这里已经有了答案:
Accessing common struct members in std::variant
(1 个回答)
3个月前关闭。
#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
value 不知道它的类型但知道它的属性?我相信这被称为相当于 Duck Typing 的通用多态性。
最佳答案
完全有效的用例。我想有很多方法可以做到,但这里有一个:
std::visit([](auto&& val) { val.foo(); }, v);
Demo您的初始代码不起作用的原因是
A::foo
与 B::foo
无关,因此要互换使用它们,您需要一个上下文,其中类型“包含”一个 foo
成员被推导出来。在 visit
例如,我们通过使可调用对象成为通用 lambda 来创建这样的上下文。
关于c++ - 如何访问兼容的 std::variant 变体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68623787/