(C ++,boost :: variant)boost变量映射的数据类型,并对其进行数学运算

时间:2019-01-23 04:03:00

标签: c++ dictionary boost variant

我定义了以下类型的d

typedef boost::variant<string, double> flex_String_Double;
map<string, flex_String_Double> FDParam;

并且FDParam具有以下形式:

{"setNumber", 3}
{"Money", 3.152}
{"Fight", "No"}

我想做的是(希望获得6.152):

cout << FDParam["setNumber"] + FDParam["Money"] << endl;

但是,此命令不起作用,并给我以下错误:

Invalid operands to binary expression ('std::__1::map<std::__1::basic_string<char>, boost::variant<std::__1::basic_string<char>, double>, std::__1::less<std::__1::basic_string<char> >, std::__1::allocator<std::__1::pair<const std::__1::basic_string<char>, boost::variant<std::__1::basic_string<char>, double> > > >::mapped_type' (aka 'boost::variant<std::__1::basic_string<char>, double>') and 'double')

有人可以帮助我解决此问题吗?

1 个答案:

答案 0 :(得分:1)

您必须使用#include <iostream> #include <map> #include <boost/variant.hpp> typedef boost::variant<std::string, double> flex_String_Double; std::map<std::string, flex_String_Double> FDParam; int main() { FDParam["setNumber"] = 3; FDParam["Money"] = 3.152; FDParam["Fight"] = "No"; std::cout << boost::get<double>(FDParam["setNumber"]) + boost::get<double>(FDParam["Money"]) << std::endl; std::cout << "Can Fight? " << boost::get<std::string>(FDParam["Fight"]) << std::endl; } 来从变体中推断出要采用的类型...

#include <iostream>
#include <map>
#include <boost/variant.hpp>

typedef boost::variant<std::string, double> flex_String_Double;

int main()
{
    std::map<std::string, flex_String_Double> FDParam = {
        { "setNumber", 3 },
        { "Money", 3.152 },
        { "Fight", "No" },
    };
    std::cout << boost::get<double>(FDParam["setNumber"]) + 
                 boost::get<double>(FDParam["Money"]) << std::endl;
    std::cout << "Can Fight? " << boost::get<std::string>(FDParam["Fight"]) << std::endl;
}

编辑:另外,如果您考虑使用全局变量,则可以将这段代码简化很多……如果需要,可以使用references任何其他访问/修改变量的功能...

{{1}}