Pobierz wskaźnik funkcji ze std :: function podczas używania std :: bind

Próbuję użyćstd::function w połączeniu zstd::bind, ale mam pewne problemy.

To działa:

#include <functional>
#include <iostream>

void print() {
    std::cout << 2;
}

int main() {
    std::function<void ()> foo = print;
    (*foo.target<void (*)()>())(); //prints 3
}

Awaria w drugiej liniimain:

#include <functional>
#include <iostream>

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

int main() {
    std::function<void ()> foo = std::bind (print, 2);
    (*foo.target<void (*)()>())();
}

Naprawdę trzymamstd::function<void ()> i musi być w stanie zwrócić funkcję; nie tylko to nazywaj. Spodziewam się, że użycie będzie takie:

#include <functional>
#include <iostream>

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

int main() {
    Container c (std::bind (print, 2));

    //I would expect the original
    c.func() (3); //prints 3

    if (c.func() == print) /* this is what I'm mostly getting at */
}

Czy jest jakiś sposób, aby uzyskać oryginalną funkcję zwrotu lub alternatywę? To także powoduje konflikt z typem powrotu, podobnie jakvoid (*)() pasuje do podpisu związanego dość ładnie.

questionAnswers(3)

yourAnswerToTheQuestion