在基类中创建派生类实例

时间:2016-08-19 11:38:12

标签: inheritance c++-cli

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

1 个答案:

答案 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()。