实现函数的c++属性
c++ properties implementing functions
假设一个普通的玩家会将某些事件通知给类的某些对象。我创建了一个基类,其中有一些虚函数保证存在于派生类中:
class PlayEventsReceiver{
virtual void StartPlay()=0;
virtual void StopPlay()=0;
};
我将从PlayEventsReceiver派生出对这些"信号"感兴趣的类
class FooPlayer:public PlayEventsReceiver{
void StartPlay(){...}
void StopPlay(){...}
};
但是如果我想,而不是继承,实现信号机制作为一个属性,像这样:
class BarPlayer{
PlayEventsReceiver receiver;
};
是否有可能在类BarPlayer中以干净的方式实现纯虚拟函数,而不是创建中间派生类?
如果没有派生类,那么编译器就没有地方放置它的函数。如果你正在寻找一些干净的,那么创建一个显式的派生类可能是最干净的了。
你无法逃避这样一个事实:某处你需要提供函数实现。
然而,似乎您可以通过创建一个未命名的类/结构来匿名地完成。但是它并没有避免创建一个派生类,因为一个匿名的派生类仍在被创建:// public interface so I use struct
struct PlayEventsReceiver {
virtual void StartPlay() = 0;
virtual void StopPlay() = 0;
};
class BarPlayer {
public:
struct : PlayEventsReceiver {
void StartPlay() override
{
std::cout << "Start Playn";
}
void StopPlay() override
{
std::cout << "Stop Playn";
}
} receiver;
};
int main()
{
BarPlayer bp;
bp.receiver.StartPlay();
}
相关文章:
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- C++概念:如何使用'concept'检查模板化结构的属性?
- 子目录是否继承属性,例如add_definitions,include_directories和父Cmakelist.t
- 通过指向指针数组的指针访问子类的属性
- MSVC是否支持C++11样式的属性而不是__declspec
- QML:修改在不同QML文件(而非main.QML)中定义的子对象的属性
- 类的C++属性似乎已重新初始化
- Qt Quick-如何仅从c++代码与qml属性交互
- 用概念检查属性的类型
- C++如何将同一类的实例作为属性
- 按多个属性排序
- 主函数参数的属性
- "perf_event_attr"结构的"read_format"属性的选项到底是什么?
- C++删除未使用的类属性会导致 std::logic_error
- 无法使用 SWIG 在 Python 中实例化C++类(获取属性错误)
- 使用内存地址访问结构的属性值
- C++调用具有 *this 属性的单个帮助程序函数
- C++ 在堆栈中包含多态属性的类对象存储
- C++ 命名参数习惯用语 - 未设置字符串属性
- 使用 CTRP 时,是否访问访问父构造函数 UB 中的子属性?