4

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

现在我有类似的东西:

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 之外的任何地方

4

2 回答 2

7

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

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

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

于 2012-04-10T12:21:46.203 回答
5

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

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

于 2012-04-10T12:22:25.720 回答