CC++LI:从模板类继承的函数在C#中不可见

CC++LI:从模板类继承的函数在C#中不可见,第1张

概述我很难弄清楚如何在C#中显示父类函数. 假设我有一个模板类,它定义了一个函数foo() template <int Dim, typename Type>public ref class FixedNP{public: float foo() {return 1;};}; 然后我有一个继承自FixedNP模板的类: public ref class Vector3fP : public 我很难弄清楚如何在C#中显示父类函数.

假设我有一个模板类,它定义了一个函数foo()

template <int Dim,typename Type>public ref class FixednP{public:  float foo() {return 1;};};

然后我有一个继承自FixednP模板的类:

public ref class Vector3fP : public FixednP<3,float>{}

当我尝试从C#调用foo()函数时,例如.

Vector3fP bar = new Vector3fP();bar.foo();

它说功能Vector3fP不包含foo的定义.

当我将foo()的定义移动到Vector3fP类时,它工作正常.然而,这在实际代码中是不可行的,因为FixednP模板包含相当多的函数,这些函数应该从大约4个不同的类继承.

经过互联网上的一些搜索,我发现添加了

using FixednP<3,float>::foo;

到Vector3fP为某人修复了类似的问题.但是在我的情况下,它只会导致另一个错误,这次编译C/C++li代码时:

error C3182: ‘Vector3fP’ : a member using-declaration or access declaration is illegal within a managed type

有关如何在C#中显示我的函数的任何建议吗?

解决方法 我认为它们的关键在于 Managed Templates on MSDN的这个主张:

If a template is not instantiated,it’s not emitted in the Metadata. If a template is instantiated,only referenced member functions will appear in Metadata.

这意味着C代码中未使用的函数将不在生成的DLL中,您将无法在C#中使用它们.要解决这个问题,你可以在你的C代码中添加一个虚假的函数,它引用了这个函数:

voID phony(){    auto vec = gcnew Vector3fP();    vec->foo();}
总结

以上是内存溢出为你收集整理的C/C++LI:从模板类继承的函数在C#中不可见全部内容,希望文章能够帮你解决C/C++LI:从模板类继承的函数在C#中不可见所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1229791.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存