可以在多个头文件中拆分类吗?

时间:2012-04-10 12:16:35

标签: c++

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

现在我有类似的东西:

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之外,它不能包含在任何地方

2 个答案:

答案 0 :(得分:7)

虽然之前我在生产代码中已经看过这个,但我不同意这种风格有两个原因:

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

2)您可以在其他位置包含其他标题。即使没有包括警卫,也不保证它不起作用。

答案 1 :(得分:4)

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

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