c++ - 使用字符串键初始化结构映射

标签 c++ dictionary static struct init

我有一个

struct OpDesc {
        std::string  OPName;
        size_t       OPArgsMin;
        bool         IsVaribaleArgsNum;
        bool         IsOPChange;
        std::string  ChangeNodeOP;
        std::string  ChangeNodeLabel;
        bool         IsOPDelete;
        const char*  ErrMsg;
    };

并想初始化一个 std::map<string, OpDesc> .

我试过这样做:

typedef std::map<std::string,struct OpDesc> OpDescMap;
OpDescMap opDesc;
opDesc["StoreOp"] = {"StoreOp",2,false,false,"","",false,""};
/// etc.

我无法用 VS10 编译它。我得到:error C2059: syntax error : '{'

如何解决?

最佳答案

您的语法是有效的 C++11(请参阅 Uniform Initialization),但是,VS10 不支持它。它仅被添加到 VS12(参见 C++ features in VS2012)。一种选择是将您的编译器升级到更符合 C++11 的编译器。

如果无法升级,则必须回退到 C++03 语法。您可以使用中间变量:

OpDesc op = {"StoreOp", 2, false, false, "", "", false, ""};
opDesc[op.OPName] = op;

或者在你的结构中添加一个构造函数:

struct OpDesc {
   // ... all fields
   OpDesc(std::string const& opName, size_t opArgsMin, bool isVariableArgsNum,
          bool isOpChange, std::string const& changeNameOp,
          std::string const& changeNodeLabel, bool isOpDelete,
          char const* errMsg)
   : OPName(opName), OPArgsMin(opArgsMin), IsVariableArgsNum(isVariableArgsNum),
     IsOpChange(isOpChange), ChangeNameOp(changeNameOp),
     ChangeNodeLabel(changeNodeLabel), IsOpDelete(isOpDelete),
     ErrMsg(errMsg) {}
};

opDesc["StoreOp"] = OpDesc("StoreOp", 2, false, false, "", "", false, "");

关于c++ - 使用字符串键初始化结构映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14667710/

相关文章:

python - 整理 csv 数据并计算平均成绩

java - RecyclerView Onclick(调用非静态方法)

c++ - 静态常量变量的初始化

c++ - gSoap Exchange Web 服务连接

c++ - C++中的数组类成员初始化

php - PHP 扩展(在 C++ 中)函数中的 pthread_create 从不返回

c++ - map<string, vector<string>> vector 值的重新赋值

dictionary - Julia - 对包含 Dict 元素的字典进行排序

c++ - 关闭管道不会中断从线程生成的子进程中的 read()

c++ - GSL 中的静态虚拟解决方法