1
私はクラスプロジェクトのために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> {
}
は、これは実行可能なソリューションですか?
「これは可能でしょうか?」:試しましたか?コンパイラには何が分かりますか? – jpo38
また[mcve](http://stackoverflow.com/help/mcve)を提供すると考えると、 'EventListener'が 'T *'演算子へのキャストをオーバーロードしているのか、それともあなたのコードのバグなのかを予測するのは難しいです。 .. –