构造线程任务函数,允许任意调用任意函数
int fun1(int a)
{
std::cout << a << std::endl;
return 0;
}
int fun2(int a, int b)
{
std::cout << a << " " << b << std::endl;
return 0;
}
void fun3(std::string str)
{
std::cout << str << std::endl;
}
#include <functional>
#include <vector>
class CBase
{
public:
virtual void Run() = 0;
virtual ~CBase()
{
std::cout << "~CBase" << std::endl;
}
};
template<typename Func>
class CAA : public CBase
{
public:
CAA(Func fun) : m_fun(fun)
{
}
virtual void Run()
{
m_fun();
}
~CAA()
{
std::cout << "~CAA" << std::endl;
}
Func m_fun;
};
#include <memory>
template<typename Func>
std::shared_ptr<CBase> CreateInstance(Func _f)
{
std::shared_ptr<CBase> tmp(new CAA<Func>(_f));
return tmp;
}
int main(int argc, char* argv[])
{
{
std::vector<std::shared_ptr<CBase> > vec;
vec.push_back(CreateInstance(std::bind(fun1, 100)));
vec.push_back(CreateInstance(std::bind(fun2, 100, 200)));
vec.push_back(CreateInstance(std::bind(fun3, "hello")));
vec[0]->Run();
vec[1]->Run();
vec[2]->Run();
}
return 0;
}