Question

FastDelegate fait référence à href="http://www.codeproject.com/KB/cpp/FastDelegate.aspx" rel="nofollow noreferrer"> http://www.codeproject.com/KB/cpp/ FastDelegate.aspx , mais je ne pense pas qu'il est lié.

J'ai le code comme suit, et l'erreur a obtenu.

#include <FastDelegate.h>


using namespace fastdelegate;

template <typename T>
T Getter() {}

template <typename T>
void Setter(T) {}

template <typename T>
class Prop
{
public:
    typedef FastDelegate0<T> Getter;
    typedef FastDelegate1<T> Setter;

    Prop(Getter getter, Setter setter) :
        m_Getter(getter), m_Setter(setter)
    {

    }

private:
    Getter m_Getter;
    Setter m_Setter;
};

template <typename T>
inline Prop<T>* MakeProp(FastDelegate0<T> getter, FastDelegate1<T> setter)
{
    return new Prop<T>(getter, setter);
}

static int Target = 0;
int main()
{
    FastDelegate0<int> fdGetter(Getter<int>);
    Prop<int>* c = MakeProp(fdGetter, Setter<int>);
    // ^^^^ error: no matching function for call to 'MakeProp'
}

Si changé le main() à:

int main()
{
    FastDelegate0<int> fdGetter(Getter<int>);
    FastDelegate1<int> fdSetter(Setter<int>);
    Prop<int>* c = MakeProp(fdGetter, fdSetter); // It works.
}

ou

int main()
{
    FastDelegate0<int> fdGetter(Getter<int>);
    Prop<int>* c = MakeProp<int>(fdGetter, Setter<int>); // It works, too.
}

Je pense, MakeProp() devrait obtenir le T de fdGetter (qui est int, que appelé contructor de FastDelegate1<int> automatiquement. Mais il n'a pas fait. Pourquoi?

P.S. Je voudrais enregistrer le getter et setter dans Prop, toute suggestion de cette approche est la bienvenue. Peut-être qu'il est mauvais de copier l'exemple de FastDelegate * lors du passage d'arguments dans la fonction.

Était-ce utile?

La solution

Avez-vous essayé

Prop<int>* c = MakeProp(FastDelegate0<int>(Getter<int>), FastDelegate1<int>(Setter<int>));

Setter<int> ne peut pas être converti en FastDelegate1<T>!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top