我有一个由几个函数和很多运算符组成的类。几乎所有函数和运算符都使用模板,这就是我在头文件中实现它们的原因。 这使得很难在代码中找到一些东西,所以我决定将所有操作符移动到一个单独的头文件中。
现在我有类似的东西:
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之外,它不能包含在任何地方
答案 0 :(得分:7)
虽然之前我在生产代码中已经看过这个,但我不同意这种风格有两个原因:
1)您希望在标题中完全定义class
。您不需要查看其他标题内部以找到您要查找的内容。
2)您可以在其他位置包含其他标题。即使没有包括警卫,也不保证它不起作用。
答案 1 :(得分:4)
我认为您应该将方法定义为自由函数。然后你可以#include在常规头文件的底部,这是许多C ++库使用的做法(其中一些会使操作符文件名以.i或.inl或其他东西结尾)。
如果你这样做,似乎很好。您在OP中编写的方式有点陌生,即使它有效,也可能会抛弃代码的某些维护者,甚至可能会抛弃一些开发工具。