2016-08-19 152 views
0

有沒有辦法從基類class創建派生的class實例?在基類中創建派生類實例

如果我嘗試這樣的代碼

public ref class Foo 
    { 
    static Bar^ Create() { return gcnew Bar(); } 
    }; 

public ref class Bar : Foo {}; 

我得到一個錯誤

錯誤C2143:語法錯誤:缺少 ';'之前 '^'

如果我試圖改變這些定義的地方:

public ref class Bar : Foo {}; 

public ref class Foo 
    { 
    static Bar^ Create() { return gcnew Bar(); } 
    }; 

我得到一個錯誤

錯誤C2504: '富':基類未定義

回答

2

C++/CLI編譯器與C++編譯器具有相同的限制。這是一個單通編譯器,所有的聲明在使用之前必須是已知的。你必須通過你在C++中做同樣的圈跳,你必須寫一個向前聲明

ref class Bar;    // Forward declaration 

public ref class Foo 
{ 
    static Bar^ Create(); // Can't be inline anymore 
}; 

public ref class Bar : Foo {}; 

現在好了,所有的定義都可以:

Bar^ Foo::Create() { 
    return gcnew Bar; 
} 

FWIW:沒有什麼是不能定義Create()函數內聯了。內聯代碼的內容是抖動工作,並且總是內聯Create()等小方法。

+0

所以沒有辦法通過內聯方法來獲得這個? –

+0

正如我所指出的,從不擔心內聯方法,它在C++/CLI代碼中是無關緊要的。與C++代碼無關,以及順便說一句,現代優化器完全忽略內聯提示。 –

+0

我只是喜歡當所有的方法是內聯或分離'cpp'文件(easyer搜索)。我想我要麼必須移除所有方法,要麼例外。 –