Перевод классов C ++ в Delphi - PullRequest
       15

Перевод классов C ++ в Delphi

3 голосов
/ 11 декабря 2010

Я перевожу некоторый код 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 ++, которые принимают C ++ Thing * s и прочее, а код C ++ может вызывать функции Delphi, которые принимают Delphi Things и т. Д. Таким образом, в принципе, если приведенный выше перевод выполняется, будет ли C ++ Thing2 * равным Delphi Thing2где Delphi может вызывать его методы и т.д?

1 Ответ

2 голосов
/ 11 декабря 2010

Не совсем. В 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;
...