Typ herabsetzen, wenn der Zeiger der Elementfunktion als Vorlagenargument verwendet wird

Wenn ich möchte, dass das Element als Vorlagenargument fungiert, gibt es eine Möglichkeit, es ohne Angabe von Gründen zu schablonierenCaller Art?

<code>struct Foo
{
    template <typename Caller, void (Caller::*Func)(int)>
    void call(Caller * c) { (c->*Func)(6); }
};

struct Bar
{
    void start() 
    {
        Foo f;
        f.call<Bar, &Bar::printNumber>(this);
               ^^^^  
    }

    void printNumber(int i) { std::cout << i; }
};

int main ()
{
    Bar b;
    b.start();
    return 0;
}
</code>

wenn ich es versuche

<code>template <void (Caller::*Func)(int), typename Caller>
void call(Caller * c) { (c->*Func)(6); }
</code>

und nenne es wie

<code>f.call<&Bar::printNumber>(this);
</code>

ich bekommeCaller is not class... Error.

Gibt es eine Möglichkeit, den Compiler den Caller-Typ ableiten zu lassen?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage