E2370 単純型名が必要 (C++)

提供: RAD Studio
移動先: 案内検索

コンパイラのエラーと警告(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
};