Obter ponteiro de função de std :: function ao usar std :: bind
Estou tentando usarstd::function
em conjunção comstd::bind
mas estou tendo alguns problemas.
Isso funciona:
#include <functional>
#include <iostream>
void print() {
std::cout << 2;
}
int main() {
std::function<void ()> foo = print;
(*foo.target<void (*)()>())(); //prints 3
}
Isso cai na segunda linha demain
:
#include <functional>
#include <iostream>
void print (int i) {
std::cout << i;
}
int main() {
std::function<void ()> foo = std::bind (print, 2);
(*foo.target<void (*)()>())();
}
Eu estou realmente segurando ostd::function<void ()>
e precisa ser capaz de retornar a função; não apenas chame. Espero que o uso seja algo assim:
#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 */
}
Existe alguma maneira de obter a função original para devolvê-lo, ou uma alternativa? Ele meio que entra em conflito com o tipo de retorno também,void (*)()
corresponde a assinatura ligada muito bem.