在 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,如果它的唯一目的是用作非常长的类型名称的非常本地化的快捷方式。
是否有声明 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,如果它的唯一目的是用作非常长的类型名称的非常本地化的快捷方式。