将C++类转换为Delphi
我正在将一些C++代码翻译成Delphi,并且有一些需要翻译的抽象类。这些类用作参数/返回类型,等等,我的问题是,如果一个C++类层次结构像这样:将C++类转换为Delphi
class Thing {
virtual void blah() = 0;
};
class Thing2 : public Thing {
virtual bool asdf(Thing*) = 0;
};
可以在Delphi被改写为:
Thing = class
procedure blah; virtual;
end;
Thing2 = class(Thing)
function asdf(Thing) : Boolean; virtual;
end;
而Delphi代码可以调用带有C++ Thing *和C++的C++函数,而C++代码可以调用带Delphi函数的Delphi函数等等。所以基本上,如果进行了上面的转换,C++ Thing2 *将等于Delphi可以调用的Delphi Thing2它的方法等?
不完全。在C++中,将方法标记为= 0
意味着它是一种抽象方法。在Delphi中,要获得相同的效果,您必须将其标记为virtual; abstract;
,而不仅仅是virtual;
。另外,在Delphi中,如果您立即在类名称下放置类成员声明,它将默认声明为published
,这意味着它是公有的,并为其生成RTTI。这可能不是你的本意,所以把知名度声明范围(private, protected
或public
)第一名:
Thing = class
public
procedure blah; virtual; abstract;
end;
Thing2 = class(Thing)
public
function asdf(Thing) : Boolean; virtual; abstract;
end;
那么,在虚拟后添加抽象将使C++中的Thing2 *等同于Delphi中的Thing2? – 2010-12-11 03:57:08
@John:是的,再加上看我的编辑另一个小小的区别。 – 2010-12-11 03:58:22
非常完美,非常感谢。 – 2010-12-11 04:02:02
您可能需要阅读鲁迪Velthuis的文章‘Delphi中使用C++对象’(http://rvelthuis.de/文章/篇-cppobjs.html)。 – 2010-12-12 17:02:20