ここから本文です

boost::variantの使い方の質問です。 variant<int, std::string>のような型の値か...

uga********さん

2012/1/1103:44:34

boost::variantの使い方の質問です。
variant<int, std::string>のような型の値からstd::stringの変数を初期化したいのですが、うまくいきません。

variant<int, std::string> val; // std::stringの値が入っているものとする。
std::string str(boost::get<std::string>(val));

こんな感じで初期化できそうだと思ったのですが、bad_getがスローされます。
どのように書けばよいか教えて頂けると嬉しいです。

boostは1.48.0、コンパイラはVC++2008 Express Edition SP1です。
情報不足がありましたらその点もご指摘下さい。

閲覧数:
683
回答数:
1
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

えびさん

2012/1/1112:00:51

variant<int, std::string> val;
#入れる前に val.which() == 1でチェック。
std::string str(boost::get<std::string>(val));

bad_getが返されているってことは、valの中に該当するものが無いか、
Includeが足りてないか。

参考までに簡易コード。

boost::variant<int, double, std::string> test;
test = "hoge";
assert (test.which() != 2 ); //std::stringじゃなければassertにひっかかる
std::string str(boost::get<std::string>(test));

質問した人からのコメント

2012/1/17 00:20:00

ご回答有難うございます。仰る通り、変数の中身がstringではないのが原因でした。
DBからデータをフェッチしてshared_ptrで保持していたのですが、variant<int, double, string, void*>の変数へ代入するときshared_ptrのget()を使ってしまったため、void*だと判定されていました。
単純なミスでお恥ずかしい限りですが、とても助かりました。有難うございます。

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる