在 C++ 中声明 using 的位置是否有好的做法?

Is there good practices for where to declare using in C++?

是否有声明 using 的良好实践(对于 typedef 之类的用法)?

例如,如果我有一个 class 和一个 std::array<std::array<T, W>, H> 成员,并且我想使用 使用 来简化读写操作

template<typename T, uint32_t H, uint32_t W>
using matrix = std::array<std::array<T, W>, H>;

我应该把它放在哪里?在 class 声明内部或外部,甚至在单独的头文件中 ?

谢谢

您的 type alias template 与模板 class 的用途完全相同,即定义类型:

template<typename T, uint32_t H, uint32_t W>
using matrix = std::array<std::array<T, W>, H>;

int main() {
    matrix<double, 10,3> m; 
    return 0;
}

所以最好的做法是像处理其他类型定义一样处理它:

  • 如果您打算在许多地方重复使用此定义,请将其放在 header 中(对于您的示例来说似乎如此,因为矩阵是相当通用的东西);
  • 如果它是一个没有通用目的的实现细节,则将其嵌入 class(可能是 header);
  • 如果您在单个源文件中使用您的矩阵,请将它放在您使用它的编译单元中。

对于non-template类型别名,原理和旧的typedef是一样的,所以和上面完全一样,另外,

  • 将其放入函数 body,如果它的唯一目的是用作非常长的类型名称的非常​​本地化的快捷方式。