使用模板的子类实例化模板

时间:2017-01-05 12:56:40

标签: c++ templates

我试图用C / C ++实现一个类项目的游戏引擎。我决定使用the acyclic visitor pattern在子系统之间发送事件,因为我需要能够在引擎之外扩展事件和子系统集。我想为这部分内容使用模板,因为很多代码都是相同的,只有不同的类型作为参数。在创建新事件时,我想继承Event类模板,然后使用子类实例化它:

// Event.h
template<typename T>
class Event {
    static_assert(std::is_base_of<Event, T>::value);
public:
    void Event::accept(EventListenerBase& el){
        if (EventListener<T>* eventListener = dynamic_cast<EventListener<T>*>(*el)){
        eventListner->accept(this);
        }
    }
};

// MyNewEvent.h 
class MyNewEvent : public Event<MyNewEvent>  {

}

这是一个可行的解决方案吗?

1 个答案:

答案 0 :(得分:2)

是的,并且实际上有这个模式的名称:奇怪的重复模板模式(或CRTP)。

顺便说一下。这不是专门化模板,而是实例化它。专业化将是

template<>
class Event<MyNewEvent> { /* ... */ };