Я пытаюсь использовать новую функциональность карты protobuf в C++.Как использовать Google Protobuf Map в C++?
Следующая было сделано на Ubuntu 14.04 с GCC 4.9.2 C++ 14 и Protobuf 3.0.0-альфа-4:
определение Сообщение:
message TestMap {
map<string,uint64> map1 = 1;
}
Затем я попытался скомпилировать следующий пример программы:
auto test = debug::TestMap::default_instance();
auto map = test.mutable_map1();
string key = "key";
uint64 val = 20;
map[key] = val;
Acccessing карту, используя синтаксис [] работает совершенно нормально для станд :: unordered_map. Но реализация Protobuf всегда дает следующее сообщение об ошибке компилятора:
error: no match for ‘operator[]’ (operand types are ‘google::protobuf::Map<std::basic_string<char>, long unsigned int>*’ and ‘std::string {aka std::basic_string<char>}’)
Я не понимаю, почему этот оператор не известен, так как файл заголовка Google :: Protobuf :: Карта явно найдено, и это должно быть элементарная операция.
Вы знаете что-то не так? Я бы приветствовал любой пример использования новых карт protobuf, так как я не нашел ни одного онлайн после исследования в течение нескольких часов.
Ваша переменная 'map', кажется, указатель. Вы попробовали '* map [key]'? – Pixelchemist
@Pixelchemist: Вы правы, спасибо, что указали это. '* map [key]' не работает, но '* (map) [key]' делает. Довольно простой! Я все время смотрел в неправильном направлении. –
@Pixelchemist: Вы хотите опубликовать ответ или мне это нужно? –