2016-11-12 53 views
1

5年前我開始用java編程,所以當我在2年前轉向C++時,成員函數的實現相當令人惱火。C++:避免​​在每個成員函數之前輸入類名的方法嗎?

Foo::bar(){/*some stuff*/} 
Foo::baz(){/*some other stuff*/} 

那時候我只是有點習慣了,但最近我想知道是否有任何的方法來組織代碼,以避免打字是富::每一個功能,也許是這樣的:

Foo::{ 
    bar(){//some stuff} 
    baz(){//some other stuff} 
} 

我發現,即使在2年後,即使我自己的代碼讀取也仍然有困難,因爲函數的名字本身並不是第一行。

編輯:由於這個問題是重複的,我以爲我會分享一件事,我發現點擊鏈接。目前這是絕對不可能的,但有一個proposal將其添加到標準。不知道是否或何時可能實際添加,但如果您從現在開始閱讀這些內容,這可能是一個很好的選擇。

+2

但寫入公共或私人都不刺激;) – Logman

回答

1

不,不存在(除非你定義了一個成員函數的上下文與它的聲明,因此當你定義你的類 - 這或多或少是Java實際發生的事情)。

換句話說,如果你不希望這樣做:

// .h 
struct S { void f(); }; 
// .cpp 
void S::f() {} 

你仍然可以做到這一點:

// .h 
struct S { void f() {} }; 

反正它也有缺點,你不能做好應對與他們在任何情況下。

+0

問題是,你的例子是不完全平等的。 – Logman

+0

@Logman:第二個增加了調用'S :: f()'的內聯的可能性,但是這兩個在功能上是等價的。 – Peter

+0

我也希望能夠將類聲明和實現分開。我認爲在這種情況下我不能吃我的蛋糕並吃它? – ThaHypnotoad