Можно ли изменить эту инициализацию С++ 11:
const std::map<int, std::map<int, std::string>> test =
{{1,
{{1, "bla"},
{2, "blie"}
}
},
{3,
{{1, "ha"},
{2, "hie"}
}
}
};
В какую-то форму с Boost.Assignment без использования временных? К сожалению, вложить map_list_of
таким образом не представляется возможным. Я ошибаюсь?
Примечание. Я готов к некоторым ужасным макросам. Пока это работает достаточно в целом, это было бы хорошо. Шаблоны с переменным числом аргументов не подходят, так как целевым компилятором является Intel C++ 2013 и/или MSVS2012.
EDIT: «идеальный» интерфейс оболочки, который я хотел бы использовать, выглядит примерно так:
//header
extern const std::map<int, std::map<int, std::string>> test;
// source file
/*something*/ test
/*something*/ 1,
/*something*/ 1, "bla" /*something*/
/*something*/ 2, "blie" /*something*/
/*something*/ 2 //etc...
Где любое /*something*/
может быть пустым. Это должно использовать обе скобки С++ 11 init или boost::assign::map_list_of
. Я пытаюсь избежать ручного повторения, как здесь: https://stackoverflow.com/a/1872506/256138