E2370 単純型名が必要 (C++)
Delphi と C++ 間での相互運用性を保証するため、published のクロージャ型のパラメータ リストに指定する型には、制限があります。このパラメータ型は、任意の const 修飾子と、ポインタまたは参照表記を持つ、単純型名でなければなりません。
このため、クロージャ型を宣言する場合、そのクロージャに渡される引数は、単純型でなければなりません。たとえば、テンプレートは使用できません。テンプレート型オブジェクトへの参照をクロージャへ渡すには、単純型名として認識される、typedef を宣言しなければなりません。
例:
#include <System.hpp>
template <typename T>
struct SomeTemplateType{ T t; };
struct TCppTest : public TObject
{
// Bad
typedef void __fastcall (__closure *foo1)(SomeTemplateType<int> *);
// Good
typedef SomeTemplateType<int> SimpleTypeName;
typedef void __fastcall (__closure *foo2)(SimpleTypeName *);
foo1 FProp1;
foo2 FProp2;
__published:
__property foo1 prop1 = { read=FProp1 }; // Error
__property foo2 prop2 = { read=FProp2 }; // Ok
};