gpt4 book ai didi

c++ - 使用模板的子类实例化模板

转载 作者:行者123 更新时间:2023-11-30 03:35:06 25 4
gpt4 key购买 nike

我正在尝试用 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> {

}

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

最佳答案

是的,这个模式实际上有一个名称:Curiously recurring template pattern(或 CRTP)。

顺便说一句。这不是专门化模板,而是实例化它。特化是

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

关于c++ - 使用模板的子类实例化模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41485718/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com