1

我是一个 C++ 菜鸟,试图构建一个实时跟踪我所有资产和负债的个人理财 websocket 服务器。

我发现我可以使maps of maps 具有键值对的多维系统。

我还发现它boost::any可以boost::variant用来存储一个值的多种类型。我的问题是,与其他级别相比,某些级别并不是很复杂。例如,银行账户只有一个值,即账户中的金额,而经纪账户将有多种类型的投资和特征,所以我想做类似(在 json 中)的事情:

{
    'bankAccount': 100.00,
    'brokerageAccount': {
        'stocks': {
            'companyName': 'Stack Exchange',
            'ticker': 'STAK',
            'pps': bazillion
            ...

需要时可以在哪里编辑和删除,bankAccount并在必要时丢弃。brokerageAccountinserterase

我真的不知道从这里去哪里。当我尝试放

map<string, boost::any> accounts;
accounts["cash"] = 100;
accounts["brokerageAccount"] = map<string, boost::any>;

在这个websocket serverprivate的部分中,这些标志给出了最后两行。broadcast_servergcc-I ~/websocketpp-master/ -std=c++0x -D_WEBSOCKETPP_CPP11_STL_ -D_WEBSOCKETPP_NO_CPP11_REGEX_ -lboost_regex -lboost_system -L/usr/lib -pthread -O0 -ljson_spiriterror: ‘accounts’ does not name a type

我怎样才能最好地以上述 json 类型的方式存储数据,并且能够在任何地方添加和删除键和值?

4

2 回答 2

1
accounts["brokerageAccount"] = map<string, boost::any>;

您不能将类型分配给对象。要解决问题添加()

accounts["brokerageAccount"] = map<string, boost::any>();

应该正确编译的变体是:

#include <boost/any.hpp>
#include <map>
#include <string>

int main()
{
   std::map<std::string, boost::any> accounts;
   accounts["cash"] = 100;
   accounts["brokerageAccount"] = std::map<std::string, boost::any>();
}
于 2013-09-14T19:40:44.360 回答
1

map<string, boost::any>最后一行是一个类型,而不是该类型的对象。您必须调用该类型的构造函数来创建参数。将最后一行更改为

accounts["brokerageAccount"] = map<string, boost::any>();

这在我的 Visual Studio 2010 副本上修复了它

于 2013-09-14T19:42:49.853 回答