在基础 class 中创建派生 class 实例
Create derived class instance in base class
有没有办法从基础 class
创建派生 class
实例?
如果我尝试这样的代码
public ref class Foo
{
static Bar^ Create () { return gcnew Bar (); }
};
public ref class Bar : Foo {};
我收到一个错误
error C2143: syntax error : missing ';' before '^'
如果我尝试更改这些定义的位置:
public ref class Bar : Foo {};
public ref class Foo
{
static Bar^ Create () { return gcnew Bar (); }
};
我收到一个错误
error C2504: 'Foo' : base class undefined
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() 这样的小方法。
有没有办法从基础 class
创建派生 class
实例?
如果我尝试这样的代码
public ref class Foo
{
static Bar^ Create () { return gcnew Bar (); }
};
public ref class Bar : Foo {};
我收到一个错误
error C2143: syntax error : missing ';' before '^'
如果我尝试更改这些定义的位置:
public ref class Bar : Foo {};
public ref class Foo
{
static Bar^ Create () { return gcnew Bar (); }
};
我收到一个错误
error C2504: 'Foo' : base class undefined
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() 这样的小方法。