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
}
これは、次の2行目でクラッシュし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 (*)()
バインドされた署名と非常によく一致するため、returnタイプとも競合します。