Pobierz wskaźnik funkcji ze std :: function podczas używania std :: bind
Próbuję użyćstd::function
w połączeniu zstd::bind
, ale mam pewne problemy.
To działa:
#include <functional>
#include <iostream>
void print() {
std::cout << 2;
}
int main() {
std::function<void ()> foo = print;
(*foo.target<void (*)()>())(); //prints 3
}
Awaria w drugiej liniimain
:
#include <functional>
#include <iostream>
void print (int i) {
std::cout << i;
}
int main() {
std::function<void ()> foo = std::bind (print, 2);
(*foo.target<void (*)()>())();
}
Naprawdę trzymamstd::function<void ()>
i musi być w stanie zwrócić funkcję; nie tylko to nazywaj. Spodziewam się, że użycie będzie takie:
#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 */
}
Czy jest jakiś sposób, aby uzyskać oryginalną funkcję zwrotu lub alternatywę? To także powoduje konflikt z typem powrotu, podobnie jakvoid (*)()
pasuje do podpisu związanego dość ładnie.