如果您的团队同意一组别名,则使用类型别名进行STL容器不良练习
Is using type aliases for STL Containers bad practice if your team agrees upon a set of aliases?
这样做这样的事情以保护代码免受太多的std ::'s?
有什么问题// These underscore_cased type aliases make my code shorter and easier to read for me.
// For Example:
template<class T> using v=std::vector<T>;
template<class T, class U> using u_m=std::unordered_map<T,U>;
template<class T> using p_q=std::priority_queue<T>;
template<class T,class U> using u_mm=unordered_multimap<T,U>;
还是这种风险行为?
我看不出这会如何污染我的名称空间,就像使用名称空间std一样。
这样做:
-
使您的代码更难阅读。
-
用
vec
和u_m
。
c 是合理的简洁。我的建议是习惯std::
。
不过,using
或typedef
在class
的范围内没有错。甚至可以有用;允许您更改定义的组件而无需更改依赖代码。
我对您建议的名称的主要关注点是,当您尝试将它们用作变量名称时,它们会导致意外错误。拥有称为vec
的本地变量是非常标准的东西。
请注意,这种问题通常仅由于命名惯例而避免:例如,在大多数C 代码库中,类型以大写字母开头,是CamelCased
,而本地变量以小写字母开头(这也是如何stackoverflow上的语法突出显示btw(。std
名称遵循不同的惯例,这通常不是一个问题,因为它们处于自己的命名空间中。您不能命名变量std::vector
。
基本上,您建议的别名与此破坏,并打开所有令人讨厌的问题和"不阅读",这些约定应该消除。
由Bjarne Stroustrup和Herb Sutter撰写的CPPCoreGuidlines有一个有关此标题的指南:
使用模板别名简化符号并隐藏实现详细信息。
给出的原因是:
提高了可读性。实施隐藏。请注意,模板别名取代了特征的许多用途来计算一种类型。它们也可以用来包裹特质。
请注意,本指南中给出的示例不在全球名称空间中。
但是,您还应该确保根据其他指南可能影响性能的此类别名。
相关文章:
- 继承模板类中的类型别名
- 为什么 GCC 在使用类型别名时处理 const reinterpret_cast不同?
- 类作用域的类型别名"using":[何时]方法中的用法可以先于类型别名?
- C++模板/别名 - 模板参数列表中参数 1 处的类型/值不匹配
- 如何使用类型别名从模板化类中隐藏模板列表
- 如何检测类型类型别名?
- C++类型别名,其中值被替换
- 在Qt中注册自定义元类型的别名类型
- 使用外部定义的模板类型作为模板参数的更通用模板的模板别名
- 如何为流输出运算符提供重载<<模板'using'类型别名?
- 通过类型别名从构造函数转发模板推导
- C++通过别名指针以静默方式将错误的类型分配给数组元素
- 为什么此模板定义了一组匹配void的别名类型
- 如何返回类中别名类型的值
- 在不键入别名类型的完整声明的情况下,无法从类模板定义中访问类型的类型别名
- 依赖于参数的查找在来自另一个命名空间的别名类型上意外行为
- 为什么我不能用"unsigned"限定别名类型?
- 当涉及到友谊时,为什么别名模板会与别名类型模板区别对待
- size_t是否保证是整数类型之一的别名类型?
- 将别名模板强制转换为别名类型