实现函数的c++属性

c++ properties implementing functions

本文关键字:属性 c++ 函数 实现      更新时间:2023-10-16

假设一个普通的玩家会将某些事件通知给类的某些对象。我创建了一个基类,其中有一些虚函数保证存在于派生类中:

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();
}