I mis en œuvre une classe de base de modèle pour motif d'observateur,problème de pointeur de fonction réécrite à la classe de base modèle C++
template<class T>
class ActionListener
{
public:
ActionListener(void);
virtual ~ActionListener(void);
void registerListener(T* listener);
void unregisterListener(T* listener);
template<typename Signal>
void emit(Signal signal);
template<typename Signal, typename Parameter>
void emit(Signal signal, const Parameter& parameter);
template<typename Signal, typename Parameter1, typename Parameter2>
void emit(Signal signal,
const Parameter1& parameter1,
const Parameter2& parameter2);
private:
std::vector<T*> mListenerList;
};
class IEventListener
{
public:
virtual void messageArrived(Message* message);
virtual void messageArrived(ClientHandle* handle, Message* message);
};
je suis en utilisant des cours comme celui-ci
emit(&IEventListener::messageArrived, message);
emit(&IEventListener::messageArrived, mHandle, message);
le problème est ici, le compilateur ne peut pas en déduire paramètres de modèle et je ne pouvais pas donner des paramètres de modèle explicitement?
Est-ce que quelqu'un a une idée?
EDIT: La fonction "Émettre" fonctionne correctement pour les autres types de fonctions.
L'utilisation de ce modèle est
class SampleClass : public ActionListener<IEventListener>
{
//some stuff here
//this class is observing events of IEventListener
}
par la façon dont cela est C++.
Pourquoi ne pouvez-vous pas donner explicitement le type de paramètre template? – Locksfree
"... le compilateur ne peut pas déduire de paramètres de modèle ..." Quel est le message d'erreur? – sbi
J'ai du mal à comprendre ce que vous essayez de faire. S'il vous plaît ajouter plus d'explications. Vous avez omis la définition de Message et n'avez pas mentionné comment ActionListener doit interagir avec IEventListener. Vos fragments de code ne sont pas exactement explicites. Je pense que vous essayez d'émuler des génériques Java-style ici où T est un type de classe qui dérive de IEventListener. Mais je ne suis pas sur. – sellibitze