c++ - 将 C++ 类转换为 Delphi

标签 c++ delphi translation abstract-class

我正在将一些 C++ 代码翻译成 Delphi,并且有一些抽象类需要翻译。这些类用作参数/返回类型等,我的问题是 C++ 类层次结构是否像这样:

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*s 和东西的 C++ 函数,C++ 代码可以调用采用 Delphi Things 等的 Delphi 函数。所以基本上,如果进行了上述转换,C++ Thing2* 是否等于一个 Delphi Thing2,Delphi 可以在其中调用它的方法等?

最佳答案

不完全是。在 C++ 中,将方法标记为 = 0 表示它是一个抽象方法。在 Delphi 中,要获得相同的效果,您必须将其标记为 virtual; abstract;,不仅仅是virtual;

此外,在 Delphi 中,如果您将类成员声明紧跟在类名下,默认情况下它将被声明为 published,这意味着它是公共(public)的,并且会为其生成 RTTI。这可能不是您的本意,因此请先声明可见性范围(private、protectedpublic):

Thing = class
public
    procedure blah; virtual; abstract;
end;

Thing2 = class(Thing)
public
    function asdf(Thing) : Boolean; virtual; abstract;
end;

关于c++ - 将 C++ 类转换为 Delphi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4415082/

相关文章:

用于管理翻译表单的 Javascript 库

iOS Storyboard 可本地化字符串不适用于 UILabel 子类

c++ - 检查应用程序是否安装在 MAC OS X 上的替代方法?

C++检测类型是否为字符串对象

c++ - QTQuick设计: how to have a global class available from both C++ and QML?

qt - Qt UI 文件如何使用 Qt Linguist?

c++ - eclipse CDT远程调试错误

delphi - 为什么 Indy 无法检索我的一些邮件地址

delphi - 如何清除嵌入式 Chromium 浏览器的缓存和 cookie?

performance - 当每个字符需要单独放置和格式化时,如何快速渲染文本?