2011-07-26 57 views
6

我經常發現自己編寫了非常簡單的類而不是C風格的結構。他們通常看起來像這樣:C++生成標準構造函數

class A 
{ 
public: 
    type mA; 
    type mB; 
    ... 
    A(type mA,type mB,...) : mA(mA),mB(mB),... {} 
} 

這是一種明智的做事方式嗎?如果是的話,我想知道是否有任何第三方插件或任何方便的捷徑來自動構造構造函數的文本(例如,採用突出顯示或存在的成員定義,用逗號代替分號,將所有內容移動到同一行, ...)?謝謝

+2

就像樣式說明,我不建議將它全部放在一行上。一旦你獲得了2-3個屬性,它就會變得笨拙。相反,將每個初始化程序和可能的每個參數放在一行上。這使得添加新項更容易,它們在任何源代碼控制差異中都清楚地顯示,並且可能使代碼更易於閱讀(請記住,代碼通常是一次寫入,多次讀取)。 –

+0

旁註:從技術上講,C++中'struct'和'class'的唯一區別就是默認的訪問說明符。如果所有東西都是公開的,只要將它設置爲'struct'(即在上面的代碼中用'struct'替換'class'並刪除'public:'訪問說明符) –

回答

11

是的,只要使用普通的集合體:

struct A 
{ 
    type mA; 
    type mB; 
    ... 
}; 

用法:

A x = { mA, mB, ... }; 

的總量已沒有自定義構造函數,析構函數和賦值操作符,它允許進行充分的優化。例如,使用大括號語法進行聚合初始化通常會構造成員而不需要副本。此外,您還可以獲得儘可能最好的副本並移動編譯器爲您定義的構造函數和賦值運算符。

+0

這隻適用於他不需要析構函數 –

+0

OP說「非常簡單的類」。對析構函數的需求將是一個決定性的非簡單類的標誌! :-) –

+0

@Jeff:OP確實提到他是用C風格的結構來代替它的。所以你可以使這個消失。 –

1

編輯:以前的版本是c99,而不是c + +。現在它是C++

我認爲你可以使用{}初始化,而不是寫入構造函數。或者它在C++ 0x? C99?我不確定。但它看起來像:

struct A myA = { 3, 5}; 
+1

@Ali:呵呵,你可以刪除它然後?或者改進它? –

+0

不要以爲;實際上測試它。 PS它不編譯爲C++ –

0

我會說這是一個明智的做法,儘管OO的狂熱分子可能會對缺少封裝的問題發表評論。 我知道Visual Studio有內置的代碼片段,其中有一半是您正在尋找的工作,但取決於您的IDE