no suitable user-defined conversion from "std::_Binder<std::_Unforced, void (Test::*)(int p_test), Test *, int>" to "std::function<void (Test::*)(int)>" exists
所以......我真的不知道我的错误在哪里。自去年夏天以来我没有使用函数指针,但我知道这个例子在我学习std :: function和std :: bind时曾经有用过。
#include <iostream>
#include <string>
#include <functional>
class Test
{
public:
void display(int p_test)
{
std::cout << p_test;
}
};
void main()
{
Test t1;
std::function<void(Test::*)(int)> test = std::bind(&Test::display, &t1, 1);
}
答案 0 :(得分:3)
如果您确实要绑定this
函数的两个参数(即隐式int
参数和显式display
参数),那么您的void ()
成员函数绑定后成为std::function<void ()> test = std::bind(&Test::display, &t1, 1);
test();
函数
this
如果只绑定void (int)
参数,那么它将成为std::function<void (int)> test = std::bind(&Test::display, &t1, std::placeholders::_1);
test(42);
函数
display
如果您不想绑定任何参数,那么您的Test *
函数是一个包含int
和std::function<void (Test *, int)> test = &Test::display;
test(&t1, 123);
类型
Any
因此,您需要先确定要绑定的参数以及要保持未绑定的参数。
答案 1 :(得分:-1)
你必须像这样使用std :: function。
std::function<void()>
正如@ user0042建议的那样,auto
会在这里完成工作,但我认为你想存储一个仿函数。然后std::function
是正确的方法。
如果你想在类或类似的东西中存储一个仿函数,auto
将无济于事。 std::bind
确实有点神秘,但我不认为lambda
是解决这个问题的必要条件。