我正在尝试与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 (*)()
与绑定签名非常匹配。