[C ++ / CLI:从模板类继承的函数在C#中不可见

问题描述 投票:4回答:2

我很难弄清楚如何使父类函数在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个不同的类中继承。

在Internet上进行一些搜索后,我发现添加了

using FixedNP<3, float>::foo;

Vector3fP为某人解决了类似的问题。但是就我而言,这只是导致另一个错误,这次是在编译C ++ / CLI代码时:

错误C3182:'Vector3fP':成员using-声明或访问声明在托管类型中是非法的

关于如何使我的函数在C#中可见的任何建议?

我很难弄清楚如何使父类函数在C#中可见。假设我有一个模板类,它定义了一个函数foo()template public ref ...

c# .net visual-studio-2010 c++-cli
2个回答
2
投票

我认为他们的关键是来自Managed Templates on MSDN的此声明:


0
投票

您可以通过添加以下行来实例化整个模板类而无需添加phony方法。

© www.soinside.com 2019 - 2024. All rights reserved.