有没有办法从基础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:'Foo':基类未定义
答案 0 :(得分: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()。