在boost变量中使用相同的数据类型

时间:2011-04-28 06:16:17

标签: c++ boost boost-variant

我们可以明确地对存储在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。 有没有办法直接更改其中的值_(类变体中的私有变量)或显式指定要使用的数据类型?

此致 Ankith

1 个答案:

答案 0 :(得分:7)

这是可能的,但它不会按预期工作。

关于变体的关键思想是该类型充当。当您实际请求给定类型(使用boost::get或访问)时,variant中与该键匹配的第一个类型将被选中,因此这里asd将被傲慢地忽略。

如果您需要为不同目的存储多个整数,可以使用BOOST_STRONG_TYPEDEF创建不同的类似整数的类,并使用variant中的类。