我知道 C++11 引入了别名模板(在这个线程中对此进行了很好的解释),这使得减少冗长变得很简单。例如:
#include <vector>
template <typename T>
using vec = std::vector<T>;
int main(){
vec<vec<int>> my_matrix;
//Do whatever I want to do with this matrix
}
然后我可以写
vec<vec<int>>
而不是 std::vector<std::vector<int>>
。
这适用于我的个人项目——尖括号更少,代码更简洁。
但是,我与多个对现代 C++ 熟悉程度不同的队友合作开展一个项目。令人担忧的是,太多混叠可能会使
vec<vec<int>>
真正的 std::vector<std::vector<int>>
变得不那么明显。这可能会导致潜在的混乱。
我的问题:
在团队代码库中大规模定义此类别名是否被认为是良好实践?
如何最大程度地减少混乱,或者“嗯,vec 是什么?”对于阅读代码的其他人来说,同时仍然享受较短的符号的时刻?
是否有任何推荐的指南、命名约定或文档策略可以帮助团队有效地处理这些别名?
我专门从那些在大型开发团队的生产中使用过别名模板的人那里寻找技巧、经验或风格指南。
别名的目的是命名基础类型的抽象。对于您的说明性示例:
template <typename T>
using Matrix = std::vector<std::vector<T>>;
使用名称
Matrix
比原始类型更能解释目的。这应该可以减少开发团队在大型项目中的混乱。
它可以避免拼写错误,因为输入比大模板字符串容易得多。
注意:Matrix 是一个很糟糕的说明 - 不是批评 OP - 因为它应该是一个具有适当行为的类。
别名还提供了实施方面的灵活性。在这种情况下,可以在别名定义处更改底层容器,从而避免在项目中搜索每个外观。例如,更改为
std::set
。 (是的,这不适用于 Matrix;只是一个说明。)
注意:大多数现代 IDE 通过悬停或提供快速跳转到定义来显示底层类型。
我什至使用简单类型的别名来了解我正在使用哪些数据:
using SumType = uint64_t;
。