c++映射类型的属性
c++ map type of attribute
我有一个映射,其中字符串表示属性的名称,第二个值表示该属性应该具有的类型。
map.insert(make_pair("X", iDatatype::iUint));
map.insert(make_pair("Y", iDatatype::iUint));
map.insert(make_pair("RADIANT", iDatatype::iFloat));
其中iDatatype只是所有可能类型的枚举。
typedef enum
{
iUnknown = 0,
iByte = 1,
iChar = 2,
iUChar = 3,
iShort = 4.....
} iDatatype;
如果程序得到创建命令,例如,"RADIANT",那么它会查看映射,找到iDatatype值(iter->second)并转到switch case。
switch (iter->second) {
case iDatatype::iUint:
uint value = ......
// You gotta do what you gonna do
break;
} .......
在Switch情况下,函数将被调用,这取决于属性的类型。
这段代码可以工作。但我不确定,如果它是最好的解决方案映射字符串与类型。问题是我不知道应该找什么?您能推荐通常用于此目的的方法或技术吗?非常感谢。
除非您需要将该映射用于其他引用,否则另一种方法是:
if(command == "X" || command == "Y") // make sure command is std::string
// or use strcmp
{
// create uint
}
else if(command == "RADIANT")
{
// create float
}
然而,我不确定这将比使用map快多少,因为map使用二分搜索,而这使用迭代搜索。
如果你想获得二进制搜索的提升,而不需要另一个enum,你可以使用函数的映射:
std::map<std::string, std::function<void()> map;
map.insert(make_pair("X", &create_uint));
map.insert(make_pair("Y", &create_uint));
map.insert(make_pair("RADIANT", &create_float));
,然后把它叫做:
std::string key = "X";
map[key]();
也可以传递参数给它,如:
void create_uint(std::string param) { /* ... */ }
std::map<std::string, std::function<void(std::string)> map;
map.insert(make_pair("X", &create_uint));
std::string key = "X";
std::string param = "XYZ";
map[key](param);
相关文章:
- 用概念检查属性的类型
- 变量(或属性)可以等于类型吗?
- C++类型的属性是继承的吗
- 如何在一个属性中动态存储基元类型
- C++将两个不同类型的向量的属性连接到新的向量中
- 将提升属性映射与捆绑类型一起使用
- 使用类属性调用具有非类型模板参数的模板函数
- 如何在提升图形库中获取属性的类型
- 我创建了deque<CObject*>并添加了不同类型的元素。如何更改此元素的属性?
- 应用于类型别名声明的 [[maybe_unused]] 属性的语法
- 精神X3,如何获得属性类型以匹配规则类型
- 如何在 C++ 中使类属性类型与在 C# 中一样
- 如何使用Qi :: Hold []解析器指令.(带有boost ::交换的属性类型的问题)
- 将单个属性类转换为属性类型
- 枚举类型作为QML的C++类中的属性类型
- 强制属性类型为doxygen
- QML 无法将分配shared_ptr分配给<Track> [未知属性类型]
- 使用 boost::spirit 解析二进制文件时更改属性类型
- 属性类型未知的模板类中的默认构造函数
- Boost spirit解析器属性类型不工作