如何使用Boost :: Get?</float>从Boost :: Variant中提取<float>

时间:2014-10-14 11:00:08

标签: c++ boost boost-variant

我在学校项目中使用Boost :: Variant,并从Variant中提取“浮点类型”。

我尝试过使用std :: string和float,并且字符串工作正常。

    boost::variant<std::string, float> var1;
    var1 = 123.0F;
    var1 = "test";

    std::string s1 = boost::get<std::string>(var1);
    float f1 = boost::get<float>(var1);

但是当最后一行被运行时,我得到一个boost :: bad_get异常,就像它在Variant中找不到类型float一样?

2 个答案:

答案 0 :(得分:2)

它的变种。它当时只能处理一个值。当您致电boost::get时,变体中没有浮动。

答案 1 :(得分:2)

您期望的更像是元组或融合地图:

元组

Live On Coliru

boost::tuple<std::string, float> var1 = boost::make_tuple("test", 123.0f);

std::string s1 = boost::get<0>(var1);
float f1       = boost::get<1>(var1);

Fusion Map

Live On Coliru

map<
     pair<struct name_tag, std::string>, 
     pair<struct value_tag, float>
> var1 = make_map<name_tag, value_tag>("test", 123.0f);

std::string s1 = at_key<name_tag>(var1);
float f1       = at_key<value_tag>(var1);