Я видел, как люди предлагают использовать boost :: any, чтобы иметь гетерогенную карту. То естьC++ гетерогенная карта с массивами
map<string,boost::any>
Неужели кому-нибудь повезло хранить (и успешно использовать) массивы, хранящиеся на карте, делая указанную технику?
Я был в состоянии сделать следующее:
boost::array<char,100> myArr;
map<string,boost::any> myMap;
myArr[51] = a;
myMap["imageData"] = myArr;
Проблема в том, что это, кажется, хранить весь массив в памяти дважды. Если изменить его немного и сделать это:
boost::array<char,100> myArr;
map<string,boost::any> myMap;
myArr[51] = a;
myMap["imageData"] = &myArr;
Я понятия не имею, как получить данные обратно из карты. Как я могу создать указатель boost::array<char,100>
? Могу я? Кто-нибудь еще мог сделать что-то подобное или какие-то идеи сделать что-то подобное более элегантным способом?
Первоначально, я хотел сохранить char[100]
на карте, но не смог найти способ бросить его один раз на карте (для того, чтобы использовать данные на карте, нужно отдать его правильному типу). Идеальное решение, которое позволило бы мне получить карту char[someSize]
.
Можете ли вы объяснить, какова ваша фактическая цель? –
@ Björn Pollex Я пытаюсь создать класс с параметрами времени выполнения. т.е. вместо того, чтобы иметь 'int width = 5;', определенный в классе, класс имеет 'map classMap', и пользователь класса может выполнять' classMap ["width"] = 5 ; «Это отлично работает, за исключением того, что у меня есть всевозможные проблемы с сохранением значений char [someSize] в classMap. Например: 'char myChar [1000];' 'classMap [" imageData "] = myChar;' хранит символ [1000] на карте, но использование его невозможно, потому что вам нужно использовать данные, прежде чем сможете использовать Это. –
imjojo42