私は、学校プロジェクト用の反応的なGUIを備えた小さなアプリケーションの設定を容易にするために、EventProvider/Handlerシステムを実装しようとしています。より広範なObserverパターンへのこの特定のアプローチは必須ではありませんが、実際には可能であれば、最も堅牢で軽量のようです。私はこれまで、独自の微細構築してきたが、私は実際に試してみて、含まれ、このヘッダを、他の場所でコードを使用している場合、私はエラーの数十、それらのすべての複製を取得...単純なEventHandler /バリデーショナルテンプレートと関数ポインタを使用するプロバイダ
何#pragma once
#include <vector>;
#include <algorithm>;
/// Provides a lightweight interface for implementing event-based behaviour.
template <class ...arg> class EventProvider
{
public:
/// Defines a pointer to a function equipped to handle an event from this provider.
typedef void(*EventHandler)(arg... arguments);
EventProvider();
virtual ~EventProvider();
void Subscribe(EventHandler handler);
void Unsubscibe(EventHandler handler);
void Notify(arg... arguments);
protected:
vector<EventHandler> _handlers;
};
template<class ...arg>
EventProvider<...arg>::EventProvider()
{}
template<class ...arg>
EventProvider<...arg>::~EventProvider()
{}
template<class ...arg>
inline void EventProvider<...arg>::Notify(arg... arguments)
{
for (auto handler : _handlers)
{
handler(arguments);
}
}
template<class ...arg>
inline void EventProvider<...arg>::Subscribe(EventHandler handler)
{
if (find(_handlers.begin(), _handlers.end(), handler) == _handlers.end())
{
_handlers.push_back(handler);
}
}
template<class ...arg>
inline void EventProvider<...arg>::Unsubscibe(EventHandler handler)
{
_handlers.erase(remove(_handlers.begin(), _handlers.end(), handler), _handlers.end());
}
すべてのオン
vector<EventHandler> _handlers;
C2509 syntax error: '...'
C3211 'EventProvider<>::FunctionName': explicit specialization is using partial specialization syntax, use template <> instead
:私はのEventHandlerの私のベクトルを宣言した行で
C2238 unexpected token(s) preceding ';'
C2143 syntax error: missing ';' before '<'
C4430 missing type specifier - int assumed. Note: C++ does not support default-int
template<class ...arg>
EventProvider<...arg>::EventProvider()
{}
エラーメッセージが表示された場合は、適用する行を説明してください。 –
エラーの各ブロックの下に、エラーがリンクされている行を示しました。 – ophilbinbriscoe