Получить указатель на функцию из 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 (*)()
очень хорошо соответствует связанной подписи.