一.函数指针
#include <iostream>
typedef void (*callback)(int ,int);
class MyTest
{
public:
void setCallback(callback cb)
{
m_callback = cb;
}
void add(int a, int b)
{
m_callback(a, b);
}
private:
callback m_callback;
};
void onCallback(int a, int b)
{
std::cout << "a + b = " << a + b << std::endl;
}
int main(int argc, char *argv[])
{
MyTest test;
test.setCallback(onCallback);
test.add(1, 1);
return 0;
}
二.std::bind和std::function
#include <functional>
#include <iostream>
typedef std::function<void (int ,int)> callback;
class MyTest
{
public:
void setCallback(callback cb)
{
m_callback = cb;
}
void add(int a, int b)
{
m_callback(a, b);
}
private:
callback m_callback;
};
class MyTest2
{
public:
void onCallback(int a, int b)
{
std::cout << "a + b = " << a + b << std::endl;
}
};
int main(int argc, char *argv[])
{
MyTest test;
MyTest2 test2;
test.setCallback(std::bind(&MyTest2::onCallback, &test2,
std::placeholders::_1, std::placeholders::_2));
test.add(1, 1);
return 0;
}
运行结果和上面是一样的