這個post教會了我如何初始化靜態std :: map。在C++中初始化靜態std :: map <int,STRUCTURE>
我可以用這種方法初始化a static map from int to 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;
}