假设一般玩家将特定事件通知给某些类别的对象。我创建了一个基类,其中一些虚函数保证存在于派生:
中class PlayEventsReceiver{
virtual void StartPlay()=0;
virtual void StopPlay()=0;
};
我会从PlayEventsReceiver派生出对此类"信号"
感兴趣的类class FooPlayer:public PlayEventsReceiver{
void StartPlay(){...}
void StopPlay(){...}
};
但是如果我想要而不是继承,那么将信号机制实现为属性,就像这样:
class BarPlayer{
PlayEventsReceiver receiver;
};
是否有可能以一种干净的方式在类BarPlayer中以某种方式实现纯虚函数而不创建中间派生类?
答案 0 :(得分:1)
如果您没有派生类,则编译器无处可放置其功能。如果您正在寻找 clean 的东西,那么创建一个明确的派生类可能会像它一样干净。
你无法逃避某处需要提供功能实现的事实。
但是,您似乎可以通过创建未命名的类/结构来匿名。但它并没有避免创建派生类,因为仍在创建匿名派生类:
// 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 Play\n";
}
void StopPlay() override
{
std::cout << "Stop Play\n";
}
} receiver;
};
int main()
{
BarPlayer bp;
bp.receiver.StartPlay();
}