2010-12-11 14 views
3

私はC++コードをDelphiに翻訳しています。翻訳が必要な抽象クラスがいくつかあります。これらのクラスは、などのパラメータ/戻り値の型として使用され、私の質問はされている場合はこのようなC++クラス階層:C++クラスをDelphiに翻訳する

Thing = class 
    procedure blah; virtual; 
end; 

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

とDelphiコード:

class Thing { 
    virtual void blah() = 0; 
}; 

class Thing2 : public Thing { 
    virtual bool asdf(Thing*) = 0; 
}; 

としてDelphiで書き換えることができます。 C++の機能を呼び出すC++関数を呼び出すことができ、C++コードはDelphiの関数などを呼び出すことができます。基本的に、上記の変換が行われると、C++のThing2 *はDelphi Thing2と同等ですそれは方法などですか?

+2

あなたは、 『DelphiでC++オブジェクトを使用する』ルディVelthuis'の記事を読むことをお勧めします(http://rvelthuis.de/ articles/articles-cppobjs.html)を参照してください。 –

答えて

2

C++では、メソッドを= 0とマークするのは、それが抽象メソッドであることを意味します。 Delphiでは、同じ効果を得るために、virtual; abstract;としてマークする必要があります。virtual;としてではありません。

また、Delphiでは、クラス名の直下にクラスメンバー宣言を配置すると、デフォルトでpublishedと宣言されます。つまり、publicであり、RTTIが生成されます。それはおそらくあなたの意図はありませんので、最初の可視性スコープ宣言(private, protectedまたはpublic)を置く:

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

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

それでは、抽象仮想を追加すると、C++のThing2 *はDelphiのThing2と同等になりますか? –

+0

@ジョン:そうですね、マイナーな相違点もあります。 –

+0

完璧、ありがとう。 –

関連する問題