Этот пост научил меня, как инициализировать статический std :: map.
Я мог бы использовать этот метод для инициализации статической карты от int до STRUCTURE .
Код выглядит следующим образом
#include <string>
#include <map>
#include <iostream>
typedef unsigned long GUID;
enum Function {
ADDER = 1,
SUBTRACTOR = 2,
MULTIPLIER = 3,
SQUAREROOT = 4
};
struct PluginInfo
{
GUID guid;
std::string name;
Function function;
PluginInfo(GUID guid, std::string name, Function function) : guid(guid), name(name), function(function) {}
PluginInfo() {}
};
typedef std::map<GUID, PluginInfo> PluginDB;
PluginInfo temp1(1, "Adder", ADDER);
PluginInfo temp2(2, "Multiplier", MULTIPLIER);
PluginDB::value_type pluginDbArray[] = {
PluginDB::value_type(1, temp1),
PluginDB::value_type(2, temp2)
};
const int numElems = sizeof pluginDbArray / sizeof pluginDbArray[0];
PluginDB pluginDB(pluginDbArray, pluginDbArray + numElems);
int main()
{
std::cout << pluginDB[1].name << std::endl;
}
Можно ли упростить код инициализации?
PluginDB::value_type pluginDbArray[] = {
PluginDB::value_type(1, temp1),
PluginDB::value_type(2, temp2)
};
Я пытался
PluginDB::value_type pluginDbArray[] = {
PluginDB::value_type(1, {1, "Adder", ADDER}),
PluginDB::value_type(2, {2, "Multiplier", MULIPILER})
};
Однако я получил сообщения об ошибке
mockup_api.cpp:24: error: expected primary-expression before ‘(’ token
mockup_api.cpp:24: error: expected primary-expression before ‘{’ token
Полагаю, я могу сделать структуру, содержащую только данные, если это возможно.
struct PluginInfo
{
GUID guid;
std::string name;
Function function;
}