многомерная зубчатая карта

Я новичок на c ++, пытающийся создать личный сервер веб-сокетов, который бы отслеживал все мои активы и пассивы в режиме реального времени.

Я обнаружил, что могу сделать mapс maps иметь многомерную систему пар ключ-значение.

Я также обнаружил, что boost::any а также boost::variant может использоваться для хранения нескольких типов значений. Моя проблема в том, что некоторые уровни не очень сложны по сравнению с другими. Например, банковский счет будет иметь только значение, сумму на счете, в то время как брокерский счет будет иметь много типов инвестиций и характеристик, поэтому я хотел бы сделать что-то вроде (в json):

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

куда bankAccount а также brokerageAccount может быть insertЭд и erased при необходимости и выбрасывают при необходимости.

Я действительно не знаю, куда идти отсюда. Когда я пытаюсь поставить

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 выше, с возможностью добавлять и удалять ключи и значения в любом месте?

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

Другие решения

map<string, boost::any> в последней строке указан тип, а не объект этого типа. Вы должны вызвать конструктор этого типа, чтобы создать аргумент. Измените последнюю строку на

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

Это исправляет это в моей копии Visual Studio 2010

1

По вопросам рекламы [email protected]