我正在寻找冗长集合定义的 typedef 命名约定。我们有一些使用 auto
来摆脱样式谋杀的 C++ 代码,但我们需要使该代码在非 c++11 编译器上编译。我们正在寻求为集合的 typedef
建立一个约定,该约定可能会变得相当冗长
例如
typedef std::map<enum MyFirstEnum,enum MySecondEnum> map_enum2_by_enum1_t
typedef map_enum2_by_enum1_t::value_type vtype_map_enum2_by_enum1_t
typedef map_enum2_by_enum1_t::iterator map_iterator_enum2_by_enum1_t
有很多细微差别(t
之前的iterator
而不是开头,使用类型而不是t,放弃前缀map
等。 ..)一半的时间你选择一个细微差别,一半的时间你选择另一个。
最后没有一个 typedef 看起来像另一个。
最佳答案
typedef std::map<enum MyFirstEnum,enum MySecondEnum> map_enum2_by_enum1_t;
如果没有更好地描述映射的“大图”名称,那么我建议 Enum2_By_Enum1
或Enum1_To_Enum2
:两者都意味着没有 map
的关联容器有点,有点太Hungarian根据我的口味,具有所有相同的缺陷(例如,如果您说 unordered_map
您会更改它 - 如果您记得 - 还是让它具有误导性?)。
typedef map_enum2_by_enum1_t::value_type vtype_map_enum2_by_enum1_t;
我无法想象这有什么用...我通常只会 typedef
map 的value_type
当具体值类型未知时(例如,映射或值类型是模板参数之一)并且映射没有特殊或排他性意义,例如其 value_type
,则在模板内部合理地可以是typedef
编辑为模板的 value_type
,并且在这种情况下, map 必然有一些其他更高级别的名称来反射(reflect)其在模板实例化中的角色。
总之,如果可能的话,我会忽略这一点并使用 enum2
/MyFirstEnum
直接。
typedef map_enum2_by_enum1_t::iterator map_iterator_enum2_by_enum1_t;
没有理由这样做,除非 typedef
标识符比它的别名要短得多。只需使用 <mapname>::iterator
.
如果您认为您已经获得了通过使用最后两个 typedef 改进的具体代码示例,请分享。
关于c++ - typedef 标准集合时的命名约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31047117/