当前位置:  开发笔记 > 编程语言 > 正文

在C#中使用C++ CLI模板类

如何解决《在C#中使用C++CLI模板类》经验,为你挑选了2个好方法。

我在C++/CLI中有以下类和int原语的显式模板实例化.

template
public ref class Number
{
    T _value;
public:
    static property T MinValue
    {
        T get()
        {
            return T::MinValue;
        }
    }

    static property T MaxValue
    {
        T get()
        {
            return T::MaxValue;
        }
    }

    property T Value
    {
        T get()
        {
            return _value;
        }

        void set(T value)
        {
            if( value MaxValue)
                throw gcnew System::ArgumentException("Value out of range");

            _value = value;
        }
    }

};

template ref class Number;

在编译它并使用反射器检查生成的程序集时,我能够看到一个被调用的类,Number但在尝试在C#中实例化这个相同的类时,编译器会抱怨某些System::Number类没有采用模板参数.我究竟做错了什么?这可以完成吗?



1> Autodidact..:

我有一个解决方法,声明一个继承Number该类的附加类.此类现在在C#中可见,并且可以实例化.

public ref class MyInt32 : public Number
{
};



2> JaredPar..:

反射器在这里了一点.该类的名称实际上不是Number .它实际上是'Number '.注意单引号.这些只有在使用ildasm查看类型名称时才可见.

相信这样做是为了使类型在大多数语言中不可绑定,因为它们无法理解C++模板的实际工作方式.这使得它实际上只对C++编译器可见,这是合适的,因为它是唯一实际支持模板的MS编译器(templates!= generics).

推荐阅读
殉情放开那只小兔子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有