2

Boost varaintに格納される値を明示的に型キャストできますか?

例:

typedef int abc;

typedef int asd;

typedef boost::variant<abc, char, asd, float> link_try1;

int main()
{

  link_try1 qw;
  qw = static_cast<asd>(1234);
  printf("value of which is:%d", qw.which());
  return 0;
}

ここでは、which()関数で3を再実行したいのですが、常に0を再実行します。which_(クラスバリアントのプライベート変数)の値を直接変更したり、使用するデータ型を明示的に指定したりする方法はありますか?

よろしくアンキス

4

1 に答える 1

7

可能ですが、期待どおりに動作しません。

バリアントの重要なアイデアは、タイプがキーとして機能することです。boost::get特定のタイプ(使用または訪問)を実際に要求するvariantと、キーに一致するの最初のタイプasdが選択されるため、ここでは大胆に無視されます。

さまざまな目的で複数の整数を格納する必要がある場合は、を使用BOOST_STRONG_TYPEDEFしてさまざまな整数のようなクラスを作成し、それらをで使用できますvariant

于 2011-04-28T06:28:39.593 に答える