假设我有一个模板类,它定义了一个函数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#中不可见所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)