cpp*_*guy 1 c++ inheritance pure-virtual
我有一个纯虚拟接口类和一个看起来像这样的派生类
class IInterface
{
public:
virtual void func() = 0;
};
class MyClass : public IInterface
{
public:
void func(int i) { func(); }
};
Run Code Online (Sandbox Code Playgroud)
编译器抱怨对func()in 的调用func(int i)不带0个参数.指定调用纯虚拟成员的正确方法是什么?
我提出的两个解决方案是
void func(int i) { static_cast<IInterface*>(this)->func(); }
Run Code Online (Sandbox Code Playgroud)
和
void func(int i) { IInterface::func(); }
Run Code Online (Sandbox Code Playgroud)
这些都可行吗?有没有更好的办法?两者看起来都很笨拙.
使用using-declaration将基类声明带入派生类范围:
class MyClass : public IInterface
{
public:
using IInterface::func;
void func(int i) { func(); }
};
Run Code Online (Sandbox Code Playgroud)
或者,转换this为指向base的指针也可以工作(即,您的第一个选项):
void func(int i) { static_cast<IInterface*>(this)->func(); }
Run Code Online (Sandbox Code Playgroud)
IInterface::func(); 不起作用,因为显式限定禁用虚拟调度.
| 归档时间: |
|
| 查看次数: |
69 次 |
| 最近记录: |