C ++ / CLI / C#将通用类型映射到模板类型

时间:2015-06-10 14:10:15

标签: c# c++ templates generics command-line-interface

将CLI代码编写到C ++和C#之间的接口时,通常必须在函数调用中转换某些类型,以便它们可以在C#或C ++中使用。例如,std :: string显然不存在于C#中,因此您必须将其转换为String ^,反之亦然。

现在我想包装一个C ++类,它通过一个应该公开类似泛型方法的接口将模板化函数暴露给C#。为此,我编写了一个CLI ref类,它实现了C#接口,并保存了一个指向C ++类实例的指针:

// C#
public interface ISomeClass {
    void SomeMethod<T>(T param);
}

//CLI
public ref class : ISomeClass {
public:
    generic<typename T>
    virtual void SomeMethod(T param) {
        _nativePtr->NativeMethod<T>(param); // :(
    }
    // Implementation details...
};

// C++
class SomeNativeClass {
public:
    template<typename T>
    void NativeMethod(T&& nativeParam) { /*bla*/ }
};

在我的特定情况下(使用Visual Studio 2013),这会使编译器崩溃。虽然我不认为它应该崩溃,但我可以猜测这不应该工作,毕竟我不能直接将C#类型传递给C ++函数。我想要的是一些机制,通过它我可以将泛型类型'T'转换为C ++模板类型'U'。我尝试使用模板元编程,但这不适用于CLI中的C#泛型,因为泛型类不能专门化。

有没有办法让这项工作?

0 个答案:

没有答案