是否有在C ++中声明使用的良好实践?

时间:2019-03-24 09:07:44

标签: c++ c++11 types typedef using

是否有很好的习惯来声明使用 (对于像 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>;

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

谢谢

1 个答案:

答案 0 :(得分:3)

您的type alias template具有与模板类完全相同的目的,即定义类型:

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相同,因此与上述完全相同,此外,

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