c++ - typedef 标准集合时的命名约定

标签 c++ naming-conventions

我正在寻找冗长集合定义的 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_Enum1Enum1_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/

相关文章:

android - 如何分配android :sharedUserId in the manifest?

javascript - 返回父原型(prototype)的函数的命名建议

naming-conventions - 命名约定中的撒克逊属格?

C# .net - 接口(interface)/实现方案中的 Dll 命名约定

c++ - 容器和 'iterable' 类的虚拟父级

c++ - 关闭后如何销毁子窗口?

C++:命名空间——如何在头文件和源文件中正确使用?

c++ - 检测大写锁定按键

c++ - 为什么要使用 io_service::work?

c - C 中的局部和外部变量命名约定