Frage

FastDelegate bezieht sich auf http://www.codeprroject.com/kb/cpp/fastdelegate.aspx, aber ich denke nicht, dass es verwandt ist.

Ich habe Code wie folgt und habe Fehler.

#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'
}

Wenn geändert wird main() zu:

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

oder:

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

Ich finde, MakeProp() sollte das bekommen T von fdgetter (was ist int, als der Contructor von genannt FastDelegate1<int> automatisch. Aber es tat es nicht. Wieso den?

PS Ich möchte den Getter und Setter in speichern Prop, Jeder Vorschlag für diesen Ansatz ist willkommen. Vielleicht ist es schlecht, die Instanz von FastDelegate* beim Übergeben von Argumenten in Funktion zu kopieren.

War es hilfreich?

Lösung

Hast du es versucht

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

?

Setter<int> kann nicht konvertiert werden zu FastDelegate1<T>!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top