Obtenga el puntero de función de std :: function cuando use std :: bind
Estoy tratando de usarstd::function
en conjunción constd::bind
, pero estoy teniendo algunos problemas.
Esto funciona:
#include <functional>
#include <iostream>
void print() {
std::cout << 2;
}
int main() {
std::function<void ()> foo = print;
(*foo.target<void (*)()>())(); //prints 3
}
Esto se estrella en la segunda línea 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 (*)()>())();
}
Realmente estoy sosteniendo elstd::function<void ()>
y necesitan poder devolver la función; no solo llamalo Espero que el uso sea algo como esto:
#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 */
}
¿Hay alguna forma de obtener la función original para devolverla o una alternativa? También tiene algún tipo de conflicto con el tipo de retorno, ya quevoid (*)()
coincide con la firma unida muy bien.