E2370 単純型名が必要 (C++)
Delphi と C++ の相互運用を保証するため,published のクロージャ型のパラメータリストに指定する型には制限があります。このパラメータ型は,const 修飾子(オプション)が付き,ポインタまたは参照として表記された単純型名である必要があります。
したがって,クロージャ型を宣言する場合,クロージャに渡される引数は単純型である必要があります。たとえば,テンプレートは使用できません。テンプレート型のオブジェクトへの参照をクロージャに渡すには,typedef を宣言する必要があります。これで,単純型名とみなされます。
次に例を示します。
struct __declspec(delphiclass) foo
{
typedef void __fastcall (__closure *foo1)(SomeTemplateType<int> *);
typedef SomeTemplateType<int> SimpleTypeName;
typedef void __fastcall (__closure *foo2)(SimpleTypeName *);
published:
__property foo1 prop1; // エラー
__property foo2 prop2; // OK
};