2012-04-10 57 views
3

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

现在我有这样的:

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

这绝对有可能,但如果没有适当的文档,可能会让您更难以理解您的课程。例如,仅仅扫描类声明以查看它是否有一些特殊的方法或操作符并不容易。 – 2012-04-10 12:20:00

+0

我不知道这是否是“最佳做法”,但我认为这很好,可能有助于保持代码清洁。虽然作为一般规则,并没有看具体案例,但如果你太需要它,这可能意味着你的班级设计可以变得更好。 – ShinTakezou 2012-04-10 12:20:51

+1

一种选择是只需要声明的成员函数的类定义中,然后之后(无论是在相同的标题,或另一个)中定义它们。这样可以更轻松地找到定义,而无需跳到不同的文件,也无需介绍只能包含在特殊位置的文件。 – 2012-04-10 12:23:28

回答

7

尽管我之前在生产代码中看到过这个,但我并不完全同意这种风格,原因有二: :

1)你期望class在头部被完全定义。您不需要查看其他标题以查找您要查找的内容。

2)可以包括了其它标题别处。即使没有守卫,也不能保证它不会起作用。

4

我想你应该定义方法为免费功能。然后你就可以在你的常规头文件,它是一种实践,许多C++库使用(他们中的一些将使运营商与名。我还是.INL什么结尾)的底部#包括。

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