【发布时间】:2017-09-05 01:26:14
【问题描述】:
我有两个类,根据key 的性质,我想从boost::variant 中获取结构值。代码如下所示。
#include <iostream>
#include <boost/variant.hpp>
using namespace std;
class A {
public:
struct greeting {
string hello;
};
class B {
public:
struct greeting {
string bye;
};
};
typedef boost::variant<A::greeting, B::greeting> greet;
greet getG(string key) {
greet g;
if (key == "A") {
g.hello = "MY ENEMY"; // this line doesn't work
}
else {
g.bye = "MY FRIEND"; // nor this line
}
return g;
};
int main() {
A a;
B b;
greet h = getG("A");
A::greeting my = boost::get<A::greeting>(h);
cout << my.hello << endl;
return 0;
}
我得到的确切错误是:
error: no member named 'hello' in 'boost::variant<A::greeting, B::greeting, boost::detail::variant::void_, boost::detail::variant::void_, ...>' g.hello = "MY ENEMY"; 和
error: no member named 'bye' in 'boost::variant<A::greeting, B::greeting, .../>' g.bye = "MY FRIEND";
感谢任何帮助。
【问题讨论】:
-
虽然行号可以很容易地找到特定的行,但它也让我们很难复制代码并自己尝试。标出错误所在行的注释就足够了。
-
至于你的问题,使用
boost::get获取具体结构的参考。 (有关如何使用它的示例,请参阅Boost variant tutorial)
标签: c++ boost struct conditional boost-variant