在C++中声明使用的位置是否有良好做法

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

本文关键字:是否 位置 C++ 声明      更新时间:2023-10-16

有没有好的实践来声明使用(对于类似typedef的用法(?

例如,如果我有一个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>;

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

谢谢

你的类型别名模板与模板类具有完全相同的目的,即定义一个类型:

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;
}

因此,好的做法是完全像处理其他类型定义一样处理它:

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

对于非模板类型别名,它与旧typedef的原理相同,因此与上述完全相同,此外,

  • 把它放在函数体中,如果它的唯一目的是充当非常长的类型名称的非常本地的快捷方式。