Generics 在C+中使用带有接口的通用TList+;建设者

Generics 在C+中使用带有接口的通用TList+;建设者,generics,c++builder,Generics,C++builder,如何在C++Builder中创建接口实例列表?我正在尝试以下方法,但编译器会以不同的方式对每种方法进行投诉: #include <System.Generics.Collections.hpp> ... TList__1<IInterface> IntfList; TList__1<_di_IInterface> IntfList; TList__1<DelphiInterface<IInterface>> IntfList; #包括

如何在C++Builder中创建接口实例列表?我正在尝试以下方法,但编译器会以不同的方式对每种方法进行投诉:

#include <System.Generics.Collections.hpp>
...
TList__1<IInterface> IntfList;
TList__1<_di_IInterface> IntfList;
TList__1<DelphiInterface<IInterface>> IntfList;
#包括
...
TList_u_1Intflist;
TList_u_1Intflist;
TList_u_1Intflist;
另一方面,我也无法生成包含对象的列表

TList__1<TObject> ObjList = new TList__1<TObject>();
TList__1objlist=new TList__1();
看来我完全迷路了,医生也帮不了我

或者有没有其他更好的方法?最后,我需要一个数组,但是我想动态地使用<代码>添加<代码>,然后从 InFulist- > toAlayAy(/Cuff>)获得。

< P>第一,Objult>代码> ToStuts< /Case>派生类,因此必须在C++中通过<代码>新< /代码>动态创建,例如:

TList\uuu 1*MyList=newtlist\uu 1;
...
删除MyList;
其中,
T
可以是
\u接口
TObject*
(注意
*
)等

现在,尽管如此

如何在C++Builder中创建接口实例列表

简而言之,在纯C++代码中不能用“代码”> tList</代码>自己完成。这是记录在案的行为:

Delphi泛型以C++为模板。然而,重要的是要认识到实例化发生在Delphi方面,而不是在C++中。因此,您只能对Delphi代码中显式实例化的类型使用这些模板

<>强>如果C++代码试图在Delphi中实例化的类型使用Delphi泛型,则在链接时间>/P>会出错。 本机RTL或VCL/FMX框架中没有默认的
TList
实例化。因此,您必须将自己的Delphi代码添加到C++Builder项目中,以创建此类实例化,例如:

MytListInstallationUnit.pas

单位MytListInstallationUnit;
接口
{$HPPEMIT'#pragma链接“mytlistinstationunit”}
//或者在XE5更新2及更高版本中:
//{$HPPEMIT LINKUNIT}
实施
使用
系统、泛型、集合;
初始化
TList.Create.Free;
定稿
结束。
mycppunt.cpp

#包括
#包括“MytListInstallationUnit.hpp”
...
TList__1*IntfList=new TList__1;//现在该工作了
否则,您可以使用:

#包括
...
TInterfaceList*IntfList=新的TInterfaceList;
...
删除IntfList;
< P>或,如果您不需要跨越C++/Delphi边界传递接口列表,则考虑使用PURE C++容器,如<代码> STD::vector < /C> >,例如:

#包括
...
std::向量IntfList;
至于
TList
,它实际上存在于本机Delphi RTL中,但它不适用于您,因为您没有正确使用它。它需要看起来更像这样:

TList\uuu 1*ObjList=newtlist\uu 1;
...
删除对象列表;
否则,您可以使用,例如:

#包括
...
TObjectList*ObjList=新的TObjectList;
...
删除对象列表;

或者,只使用<代码> STD::向量。

谢谢@ RemyLebeau,我真的在为我们的Delphi库中的C++例子而奋斗,各种各样的问题都在前面,我没有线索。这就解释了,我希望TList的文档也能指向那篇文章。-所以我的Delphi类需要一个DynamicArray——如果我没看错的话,没有一个简洁的方法来构建它,除非先从数组开始?@JouniAro使用DynamicArray不需要TList。它们是完全不同的东西。但是是的,如果您需要传入DynamicArray,那么您必须根据需要构造和填充它,例如:
DynamicArray arr;阵列长度=…;/*填写arr…*/MyComponent->DoSomething(arr)std::vector
。是的,这是与Delphi组件交互的示例代码,因此它需要一个动态carray。是否有任何简单的方法可以将std类型转换为Delphi(?)类型,例如std::vector到DynamicCarray?我猜DynamicCarray是Delphi类型的,不是吗?