我是一名c ++ noob试图建立一个个人财务websocket服务器,实时跟踪我的所有资产和负债。
我发现我可以使map
的{{1}} s拥有一个多维的键值对系统。
我还发现map
和boost::any
可用于存储值的多种类型。我的问题是,与其他级别相比,某些级别并不复杂。例如,银行账户只有一个值,即账户中的金额,而经纪账户将有多种类型的投资和特征,所以我想做一些像(在json中):
boost::variant
{
'bankAccount': 100.00,
'brokerageAccount': {
'stocks': {
'companyName': 'Stack Exchange',
'ticker': 'STAK',
'pps': bazillion
...
和bankAccount
可以brokerageAccount
编辑,insert
d在需要时可以根据需要丢弃。
我真的不知道从哪里开始。当我试图把
erase
在此websocket server map<string, boost::any> accounts;
accounts["cash"] = 100;
accounts["brokerageAccount"] = map<string, boost::any>;
的{{1}}部分,private
带有这些标记broadcast_server
,最后两行为gcc
。
我最好如何以上面的json方式存储数据,能否在任何地方添加和删除键和值?
答案 0 :(得分: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>();
}
答案 1 :(得分:1)
map<string, boost::any>
是一个类型,而不是该类型的对象。您必须调用该类型的构造函数来创建参数。将最后一行更改为
accounts["brokerageAccount"] = map<string, boost::any>();
将其修复到我的Visual Studio 2010副本