2013-01-06 132 views
5

另一個構造我有這個類C++構造函數調用基於參數類型

class XXX { 
    public: 
     XXX(struct yyy); 
     XXX(std::string); 
    private: 
     struct xxx data; 
}; 

第一個構造函數(誰與結構工程)很容易實現。第二個我可以以特定的格式分開一個字符串,解析並提取相同的結構。

我的問題是,在java中我可以做這樣的事情:

XXX::XXX(std::string str) { 

    struct yyy data; 
    // do stuff with string and extract data 
    this(data); 
} 

使用this(params)調用另一個構造。在這種情況下,我可以類似嗎?

謝謝

回答

2

是的。在C++ 11中,你可以做到這一點。它被稱爲constructor delegation

struct A 
{ 
    A(int a) { /* code */ } 

    A() : A(100) //delegate to the other constructor 
    { 
    } 
}; 
+0

您是否知道哪些編譯器目前正在實施此更改,我似乎記得Clang並未(例如)。 –

+0

@MatthieuM .:我不知道。沒有用任何編譯器測試過它。 :-) – Nawaz

+0

:)恐怕這在實踐中並不被認爲是重要的,因爲對私有方法的授權已經非常成功(只要所有屬性都支持賦值),因此對每個人來說都是低優先級。 –

8

你要找的術語是 「constructor delegation」(或者更一般地, 「鏈構造」)。在C++ 11之前,這些在C++中不存在。但語法就像調用基類的構造函數:如果你不使用C++ 11,你能做的最好的是定義一個私有的輔助函數來處理共同所有的東西

class Foo { 
public: 
    Foo(int x) : Foo() { 
     /* Specific construction goes here */ 
    } 
    Foo(string x) : Foo() { 
     /* Specific construction goes here */ 
    } 
private: 
    Foo() { /* Common construction goes here */ } 
}; 

構造函數(雖然這是煩人的東西,你想放在初始化列表中)。例如:

class Foo { 
public: 
    Foo(int x) { 
     /* Specific construction goes here */ 
     ctor_helper(); 
    } 
    Foo(string x) { 
     /* Specific construction goes here */ 
     ctor_helper(); 
    } 
private: 
    void ctor_helper() { /* Common "construction" goes here */ } 
}; 
+0

我提高你的答案,因爲它更完整。但例子會非常好。 :-) – Omnifarious

+2

@Omnifarious:示例現在存在! –

相關問題