使用 C++/CLI 从泛型函数返回泛型列表
本文关键字:泛型 函数 列表 返回 C++ CLI 使用 | 更新日期: 2023-09-27 18:33:38
我正在尝试在 C++/CLI 中编写一个通用函数,它将创建一个通用列表。列表的类型参数与泛型函数的类型相同。
在 C# 中,我只是这样做:
using System.Collections.Generic;
class MyClass
{
static List<T> CreateList<T>()
{
return new List<T>();
}
}
在 C++/CLI 中,我尝试做同样的事情,即
using namespace System::Collections::Generic;
generic <typename T>
List<T>^ MyClass::CreateList ( void )
{
return gcnew List< T >();
}
但我得到的只是一个编译错误:错误 C2371:"列表":重新定义;不同的基本类型
我做错了什么?
注意:实际功能将做更多的事情,而不仅仅是创建一个列表,但这就是我卡住的地方。
编辑:大家好,感谢您的回复
显然,我得到的错误具有误导性。我创建了一个仅包含(除了main(((MyClass的新解决方案,并得到了不同的错误。然后我尝试了Hans Passant的代码,神奇地它起作用了。再看一遍,我能看到的唯一区别是我完全限定了列表类型即系统::集合::通用::列表而不是列表(但是为了清楚起见,我在之前的帖子中省略了这一点(。事实证明,编译器出于某种原因不喜欢这样。即
using namespace System::Collections::Generic;
generic <typename T>
System::Collections::Generic::List<T>^ MyClass::CreateList()
{
//return gcnew System::Collections::Generic::List<T>; // this gives compile error
return gcnew List<T>; // this is all right
}
我不知道这是一个错误还是有原因...再次感谢您的帮助!
很难猜测该错误消息的来源。 "list"中的 L 没有大写,请确保您不会遇到 std::list 模板类的麻烦。 确保方法前面的类声明没有缺少分号。 Anyhoo,正确的代码如下所示:
类声明:
using namespace System::Collections::Generic;
ref class MyClass
{
public:
generic <typename T>
static List<T>^ CreateList();
}; // <== note semi-colon here.
方法定义:
generic <typename T>
List<T>^ MyClass::CreateList()
{
return gcnew List<T>;
}