私は2つのクラスを持ち、key
の性質によって、boost::variant
の構造体の値を取得したいと考えています。コードは以下の通りです。私は取得しています構造体オブジェクトでBoost Variantを使用する方法C++
#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";
すべてのヘルプは高く評価されています。
行番号が特定の行を見つけることが容易になりますが、私たちは、コードをコピーし、それを自分自身をしようとするために、それはまた、非常に難しいことになります。エラーがある行をマークするコメントで十分です。あなたの問題については –
、特定の構造への参照を取得するには、[ '後押し:: GET'](http://www.boost.org/doc/libs/1_63_0/doc/html/boost/get_idp1003723808.html)を使用します。 –