Clu*_*ess 9 c# c++ porting interface multiple-inheritance
我通常使用C#编程,但我正在尝试做一些C++,并且在尝试用C++实现接口方面有点挣扎.
在C#中我会做这样的事情:
class Base<T>
{
public void DoSomething(T value)
{
// Do something here
}
}
interface IDoubleDoSomething
{
void DoSomething(double value);
}
class Foo : Base<double>, IDoubleDoSomething
{
}
Run Code Online (Sandbox Code Playgroud)
在C++中我实现了这样:
template <class T>
class Base
{
public:
virtual void DoSomething(T value)
{
// Do something here
}
};
class IDoubleDoSomething
{
public:
virtual void DoSomething(double value) = 0;
};
class Foo : public Base<double>, public IDoubleDoSomething
{
};
Run Code Online (Sandbox Code Playgroud)
问题是我无法实例化Foo,因为它是抽象的(不实现DoSomething).我意识到我可以实现DoSomething并在Base上调用该方法,但我希望有更好的方法来做到这一点.我有其他类从base继承不同的数据类型,我有其他类继承自不使用Base的IDoubleDoSomething.
任何帮助赞赏.
正如其他人所指出的,基类中的两个函数是不相关的(尽管具有相同的名称和参数类型),因为它们没有共同的基类。如果你想让它们相关,你需要给它们一个共同的基类。
另外,一般来说,如果您希望多重继承正常工作,您需要将非私有基类声明为virtual. 否则,如果您有公共基类(正如您经常需要这种风格的代码),就会发生不好的事情。
因此,您可以按如下方式使您的示例工作:
template <class T>
class IDoSomething {
public:
virtual void DoSomething(T value) = 0;
};
template <class T>
class Base : public virtual IDoSomething<T>
{
public:
virtual void DoSomething(T value)
{
// Do something here
}
};
class IDoubleDoSomething : public virtual IDoSomething<double>
{
};
class Foo : public virtual Base<double>, public virtual IDoubleDoSomething
{
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5981 次 |
| 最近记录: |