Я новичок на c ++, пытающийся создать личный сервер веб-сокетов, который бы отслеживал все мои активы и пассивы в режиме реального времени.
Я обнаружил, что могу сделать map
с map
s иметь многомерную систему пар ключ-значение.
Я также обнаружил, что boost::any
а также boost::variant
может использоваться для хранения нескольких типов значений. Моя проблема в том, что некоторые уровни не очень сложны по сравнению с другими. Например, банковский счет будет иметь только значение, сумму на счете, в то время как брокерский счет будет иметь много типов инвестиций и характеристик, поэтому я хотел бы сделать что-то вроде (в json):
{
'bankAccount': 100.00,
'brokerageAccount': {
'stocks': {
'companyName': 'Stack Exchange',
'ticker': 'STAK',
'pps': bazillion
...
куда bankAccount
а также brokerageAccount
может быть insert
Эд и erase
d при необходимости и выбрасывают при необходимости.
Я действительно не знаю, куда идти отсюда. Когда я пытаюсь поставить
map<string, boost::any> accounts;
accounts["cash"] = 100;
accounts["brokerageAccount"] = map<string, boost::any>;
в private
раздел broadcast_server
в этом сервер веб-сокетов, gcc
с этими флагами -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_spirit
дает error: ‘accounts’ does not name a type
за последние две строки.
Как лучше всего хранить данные в формате json выше, с возможностью добавлять и удалять ключи и значения в любом месте?
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>();
}
map<string, boost::any>
в последней строке указан тип, а не объект этого типа. Вы должны вызвать конструктор этого типа, чтобы создать аргумент. Измените последнюю строку на
accounts["brokerageAccount"] = map<string, boost::any>();
Это исправляет это в моей копии Visual Studio 2010