Ruft den Funktionszeiger von der std :: function ab, wenn std :: bind verwendet wird

Ich versuche es zu benutzenstd::function in Verbindung mitstd::bind, aber ich habe ein paar Probleme.

Das funktioniert:

#include <functional>
#include <iostream>

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

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

Dies stürzt in der zweiten Zeile abmain:

#include <functional>
#include <iostream>

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

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

Ich halte wirklich diestd::function<void ()> und müssen in der Lage sein, die Funktion zurückzugeben; nenn es nicht einfach. Ich gehe davon aus, dass die Verwendung etwa so aussehen würde:

#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 */
}

Gibt es eine Möglichkeit, die ursprüngliche Funktion zu erhalten, um sie zurückzugeben, oder eine Alternative? Es ist auch eine Art Konflikt mit dem Rückgabetyp, wievoid (*)() passt sehr gut zur gebundenen Signatur.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage