2012-04-10 68 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中編寫的方式有點陌生,即使它有效,也可能會拋棄一些代碼的維護者,甚至可能會拋棄一些開發工具。

相關問題