Получить указатель на функцию из std :: function при использовании std :: bind

Я пытаюсь использоватьstd::function в сочетании сstd::bindно у меня есть некоторые проблемы.

Это работает:

#include <functional>
#include <iostream>

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

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

Это вылетает на второй строкеmain:

#include <functional>
#include <iostream>

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

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

Я действительно держуstd::function<void ()> и должны иметь возможность вернуть функцию; не просто назвать это. Я ожидаю, что использование будет примерно таким:

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

Есть ли способ получить оригинальную функцию, чтобы вернуть его, или альтернативу? Это также противоречит типу возвращаемого значения, так какvoid (*)() очень хорошо соответствует связанной подписи.

Ответы на вопрос(3)

Ваш ответ на вопрос