在C+;中,不接受std::vector作为委托返回类型+/CLI?C2065 C2061

在C+;中,不接受std::vector作为委托返回类型+/CLI?C2065 C2061,vector,delegates,c++-cli,return,Vector,Delegates,C++ Cli,Return,我有以下C++/CLI代码段: .h #pragma unmanaged #include <vector> public delegate std::vector<std::wstring> XYZ(const std::wstring& filter); .cpp XYZ^ xyz = gcnew XYZ(&myClass::xyzFunc); // <-error C2065 + C2061 .h #布拉格非托管 #包括 公共委托std

我有以下C++/CLI代码段:

.h
#pragma unmanaged
#include <vector>

public delegate std::vector<std::wstring> XYZ(const std::wstring& filter);

.cpp

XYZ^ xyz = gcnew XYZ(&myClass::xyzFunc); // <-error C2065 + C2061
.h
#布拉格非托管
#包括
公共委托std::vector XYZ(const std::wstring&filter);
.cpp
XYZ^XYZ=gcnew-XYZ(&myClass::xyzFunc);//wstring(例如),它可以工作

public delegate std::wstring XYZ(const std::wstring& filter); // <-- w/o vector<> , works!

公共委托std::wstring XYZ(const std::wstring&filter);// 显然这是一个编译器缺陷,它至少应该发出一个诊断,为什么它没有将委托类型添加到符号表中。您可以将其提交到connect.microsoft.com,但他们不会修复它

解决方法是使用typedef声明返回值类型:

typedef std::vector<std::wstring> returntype;
delegate returntype XYZ(const std::wstring& filter);
typedef std::vector returntype;
委托返回类型XYZ(常量std::wstring&filter);

我强烈建议您将C++/CLI视为一种互操作语言,这是其存在的主要原因。此委托不可由任何其他托管代码使用。请在此处使用字符串和
列表。

显然这是一个编译器缺陷,它至少应该发出一个诊断,说明为什么它没有将委托类型添加到符号表中。您可以将其提交到connect.microsoft.com,但他们不会修复它

解决方法是使用typedef声明返回值类型:

typedef std::vector<std::wstring> returntype;
delegate returntype XYZ(const std::wstring& filter);
typedef std::vector returntype;
委托返回类型XYZ(常量std::wstring&filter);

我强烈建议您将C++/CLI视为一种互操作语言,这是其存在的主要原因。此委托不可由任何其他托管代码使用。请在此处选择字符串和
列表。

std::vector不是CLR类型。。。您需要将其公开为IEnumerable/IListnor std::wstring,这是理所当然的。。。但这样行吗?为什么?我猜是因为它得到了到clr System.String的标准转换。我不是每天都使用C++/CLI,但这是我的直觉。并非所有本机类型都可以按原样封送(整数可以,某些POD结构可以,但可能不是复杂的容器类)std::vector不是CLR类型。。。您需要将其公开为IEnumerable/IListnor std::wstring,这是理所当然的。。。但这样行吗?为什么?我猜是因为它得到了到clr System.String的标准转换。我不是每天都使用C++/CLI,但这是我的直觉。并不是所有本机类型都可以按原样封送(整数可以,一些POD结构可以,但可能不是复杂的容器类),谢谢。我怀疑这里有点奇怪。。。我需要这个委托作为一个来自本地C++的函数指针的回调给托管类。复杂的东西:(PS:为什么你认为他们不会修复它?谢谢。我怀疑这里有一些奇怪的东西……我需要这个代表作为一个从本地C++ C++函数指针回调到托管类。复杂的东西:(PS:为什么你认为他们不会修复它?)