在基类中创建派生类实例

问题描述:

有没有办法从基类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: '富':基类未定义

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搜索)。我想我要么必须移除所有方法,要么例外。 –