我无法理解如何使用std::variant
在 C++17 中。给定两个结构体A
and B
, and a std::vector<std::variant<A,B>> vs
, 我想:
- 引用一个常见的结构成员,例如
n
;
- 调用一个常用函数,例如
fun()
or add()
.
#include <iostream>
#include <variant>
#include <vector>
struct A {
int n;
void fun() { std::cout << "fun\n"; }
int add(int m) { return n+m; }
};
struct B {
int n;
void fun() { std::cout << "fun\n"; }
int add(int m) { return n+m; }
};
int main() {
std::vector<std::variant<A,B>> vs;
vs.push_back(A{10,11});
vs.push_back(B{20,22});
// How to refer to struct members without using std::get<v.index()>(v)?
for (auto && v : vs) {
// 1. How to refer to v.n?
// 2. How to call v.fun()?
// 3. How to call v.add() with input parameter m?
}
}
我被告知要使用std::visit
,但我太直白了,无法理解它是如何工作的。有人可以在这里展示一个简单的例子吗?
Use std::visit
具有一个 lambdaauto&&
参数来访问所有变体类型共有的成员。在你的例子中:
for (auto&& v : vs) {
std::visit([&](auto&& x){
std::cout << x.n << x.add(1);
x.fun();
}, v);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)