#include <variant>
struct A
{
void foo(){}
};
struct B
{
void foo(){}
};
int main()
{
std::variant< A, B > v{ A{} };
v.foo(); // doesn't work
}
Run Code Online (Sandbox Code Playgroud)
如何在std::variant不知道其类型但知道其属性的情况下使用该值?我相信这被称为相当于 Duck Typing 的通用多态性。
完全有效的用例。我想有很多方法可以做到,但这里有一个:
std::visit([](auto&& val) { val.foo(); }, v);
Run Code Online (Sandbox Code Playgroud)
您的初始代码不起作用的原因是因为A::foo与 无关B::foo,因此要互换使用它们,您需要一个上下文,其中foo推断出“包含”成员的类型。在visit示例中,我们通过使可调用对象成为通用 lambda 来创建这样的上下文。
| 归档时间: |
|
| 查看次数: |
64 次 |
| 最近记录: |