有没有更好的方法从静态和非静态函数返回相同的字符串文字?

时间:2017-12-31 15:27:00

标签: c++ templates

我的c ++非常生疏,仿制药总是让我感到困惑,所以这种组合对我的大脑来说并不好,所以这就是我的问题。

我有一组看起来像这样的类:

class MyEvent2 : public Event 
{

    public:
    static constexpr char* CLASS_NAME = "MyEvent2";
    MyEvent2(Object& sender) :  Event(sender)
    {
    }

    virtual ~MyEvent2() {}

    static const char* EventId() {
        return MyEvent2::CLASS_NAME;
    }

    const char* eventId() override {
        return MyEvent2::CLASS_NAME;
    }
};

这些类将用于在事件总线上注册事件处理程序,因此我添加了这样的处理程序。

  EventBus::AddHandler<MyEvent>(*this);  
  EventBus::AddHandler<MyEvent2>(*this);  

然后我创建事件的内容并像这样解雇它们:

MyEvent e1(*this);
MyEvent2 e2(*this);
EventBus::FireEvent(e1);
EventBus::FireEvent(e2);

我的问题是如何制作这种通用名称?我希望能够制作一些派生的&#34;活动&#34;我只需要包含真正需要唯一的一行

的类
static constexpr char* CLASS_NAME = "TheClassName";

顺便说一句:我知道可以使用typeid来获得这样的东西,但是我无法在Arduino设备上使用它。

然后添加唯一的&#34;事件&#34;特定领域和成员。

这是我到目前为止所做的:

我创建了一个模板类(或者它应该被称为类模板?):

template<class T>
class ArduinoEvent : public Event 
{

    public:
    T(Object& sender) :  Event(sender)
    {
    }

    virtual ~T() {}

    static const char* EventId() {
        return T::CLASS_NAME;
    }

    const char* eventId() override {
        return T::CLASS_NAME;
    }
};

但我不知道如何使用它,或者这是否是正确的方向。

0 个答案:

没有答案