我已经检查过了,这是可行的(我可以从C#程序调用扩展方法):
[ExtensionAttribute]
public ref class ArrayExtensions abstract sealed {
public:
[ExtensionAttribute]
static array<int>^ FlipExt(array<int> ^ vals)
{
int n = vals->Length;
for (int i = 0; i < n / 2; ++i)
{
int tmp = vals[i];
vals[i] = vals[n - i - 1];
vals[n - i - 1] = tmp;
}
return vals;
}
};这也有效(我可以从C#程序调用泛型方法):
public ref class ArrayUtils abstract sealed {
public:
generic <typename T>
static array<T>^ FlipGen(array<T> ^ vals)
{
int n = vals->Length;
for (int i = 0; i < n / 2; ++i)
{
T tmp = vals[i];
vals[i] = vals[n - i - 1];
vals[n - i - 1] = tmp;
}
return vals;
}
};此C#代码也可以工作,因此.NET支持泛型扩展方法:
public static class ArrayExtensionsSharp
{
public static T[] FlipExtSharp<T>(this T[] vals)
{
int n = vals.Length;
for (int i = 0; i < n / 2; ++i)
{
var tmp = vals[i];
vals[i] = vals[n - i - 1];
vals[n - i - 1] = tmp;
}
return vals;
}
}但是当我这样做的时候,上面写着“错误C2059:语法错误:‘泛型’”
[ExtensionAttribute]
public ref class ArrayExtensions abstract sealed {
public:
[ExtensionAttribute]
generic <typename T>
static array<T>^ FlipGenExt(array<T> ^ vals)
{
int n = vals->Length;
for (int i = 0; i < n / 2; ++i)
{
T tmp = vals[i];
vals[i] = vals[n - i - 1];
vals[n - i - 1] = tmp;
}
return vals;
}
};那么,怎么了?是否有方法在C++/CLI中生成泛型扩展方法?
我想在C++/CLI中这样做,因为我需要的实际扩展方法与C++/CLI方法密切相关,而且我不希望它们都在同一个程序集中。谢谢。
编辑:注意下面的答案是有效的,但是MSDN文档(在我看来)似乎不一样:
泛型类定义(来自此页)
[attributes]
generic <class-key type-parameter-identifier(s)>
[constraint-clauses]
[accessibility-modifiers] ref class identifier [modifiers]
[: base-list]
{
class-body
} [declarators] [;]泛型函数定义(来自此页)
[attributes] [modifiers]
return-type identifier <type-parameter identifier(s)>
[type-parameter-constraints clauses]
([formal-parameters])
{
function-body
}看起来泛型函数规范是针对C#的,而不是C__ (没有“泛型”关键字,紧跟在函数名称之后)。但是它在C++页面上,我想我看了类规范,它在单词generic之前有属性,但这也是错误的。微软文档在这里完全错了吗?
发布于 2014-02-05 04:25:53
只需更改属性的位置:
generic <typename T>
[ExtensionAttribute]
static array<T>^ FlipGenExt(array<T> ^ vals)https://stackoverflow.com/questions/21567723
复制相似问题