在基类中创建派生类实例
问题描述:
有没有办法从基类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()等小方法。
所以没有办法通过内联方法来获得这个? –
正如我所指出的,从不担心内联方法,它在C++/CLI代码中是无关紧要的。与C++代码无关,以及顺便说一句,现代优化器完全忽略内联提示。 –
我只是喜欢当所有的方法是内联或分离'cpp'文件(easyer搜索)。我想我要么必须移除所有方法,要么例外。 –