在C++中声明使用的位置是否有良好做法
Is there good practices for where to declare using in C++?
有没有好的实践来声明使用(对于类似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
的原理相同,因此与上述完全相同,此外,
- 把它放在函数体中,如果它的唯一目的是充当非常长的类型名称的非常本地的快捷方式。
相关文章:
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 内存中类位置的成员是否取决于类成员在类定义中的位置?
- 标记为 std::memory_order_seq_cst 的单个原子操作是否会在所有位置触发顺序一致性?
- 是否有任何优雅的方式来遍历元素位置可以更改的列表?
- 是否可以将值分配给移出位置?
- 如果着色器中未使用绑定属性位置,是否会对其进行惩罚
- 是否可以将要"ShellExecute"的文件包含在 dll 中?如果是这样,"ShellExecute"中的文件位置应该是什么?
- 移动 std::bitset<N> 是否超过 N 个位置未定义的行为?
- 当光标位置在编辑控件 MFC 中更改时是否有通知代码?
- 在不同的内存位置同时写入 std::d eque 是否线程安全?
- POD 结构(相同类型的成员):成员是否位于连续的内存位置?
- 是否可以从触摸板获得绝对触摸位置
- 为同一存储位置调用构造函数两次是否合法?
- C++每个变量的存储位置是否正确?
- 英特尔 IPP 图像大小调整功能是否关心 alpha 值的位置
- 检查向量是否在某个位置未初始化
- 在初始化的内存上使用放置新位置是否合法
- 在C++中声明使用的位置是否有良好做法
- 如何检查指针是否指向正确对齐的内存位置
- C++的最后一个位置是否有计算单元的标准功能