是否可以在多个头文件中拆分类

Is it ok to split classes in multiple header files?

本文关键字:文件 拆分 分类 是否      更新时间:2023-10-16

我有一个由几个函数和很多运算符组成的类。几乎所有函数和运算符都使用模板,这就是我在头文件中实现它们的原因。这使得很难在代码中找到某些内容,因此我决定将所有运算符移动到单独的头文件中。

现在我有这样的东西:

fstring.h

class fstring{
    ...
    #include "fstring_operators.h"
}

和fstring_operators.h

...
template<int RSIZE>
bool operator==(const fstring<RSIZE>& rhs) const {
    return equals(rhs._chars, RSIZE);
}
...

做这样的事情可以吗?我还省略了 fstring_operators.h 的标头保护,因为它不能包含在除 fstring.h 之外的任何地方

虽然我以前在生产代码中看到过这种情况,但我不太同意这种风格,原因有两个:

1) 您希望在标头中完全定义class。您不需要查看其他标头即可找到您要查找的内容。

2)您可以在其他地方包含另一个标题。即使没有警卫,也不能保证它不起作用。

我认为您应该将方法定义为自由函数。 然后,您可以在常规头文件的底部 #include,这是许多C++库使用的做法(其中一些会使运算符文件名以 .i 或 .inl 或其他内容结尾)。

如果你这样做,似乎很好。 你在OP中编写的方式有点奇怪,即使它有效,也可能会抛弃一些代码的维护者,甚至可能抛弃一些开发工具。