首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在C++/CLI中生成泛型扩展方法

如何在C++/CLI中生成泛型扩展方法
EN

Stack Overflow用户
提问于 2014-02-05 02:50:37
回答 1查看 586关注 0票数 0

我已经检查过了,这是可行的(我可以从C#程序调用扩展方法):

代码语言:javascript
复制
[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#程序调用泛型方法):

代码语言:javascript
复制
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支持泛型扩展方法:

代码语言:javascript
复制
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:语法错误:‘泛型’”

代码语言:javascript
复制
[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文档(在我看来)似乎不一样:

泛型类定义(来自此页)

代码语言:javascript
复制
[attributes]
generic <class-key type-parameter-identifier(s)>
[constraint-clauses]
[accessibility-modifiers] ref class identifier  [modifiers]
[: base-list] 
{ 
class-body 
} [declarators] [;]

泛型函数定义(来自此页)

代码语言:javascript
复制
[attributes] [modifiers]
return-type identifier <type-parameter identifier(s)>
[type-parameter-constraints clauses]

([formal-parameters])
{
   function-body
}

看起来泛型函数规范是针对C#的,而不是C__ (没有“泛型”关键字,紧跟在函数名称之后)。但是它在C++页面上,我想我看了类规范,它在单词generic之前有属性,但这也是错误的。微软文档在这里完全错了吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-05 04:25:53

只需更改属性的位置:

代码语言:javascript
复制
 generic <typename T>
 [ExtensionAttribute]
 static array<T>^ FlipGenExt(array<T> ^ vals)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21567723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档