我想写一个QThread
函数
在run
函数中,while循环中有一个函数m_pFunc
。m_pFunc
是一个函数指针,具有未知数量的参数和类型。如何实现这个函数指针?
void func1(int){ cout<<"func1"<<endl; }
void func2(int,char){ cout<<"func2"<<endl; }
class CThread: public QThread
{
Q_OBJECT
Q_DISABLE_COPY(CThread)
public:
using PFunc = void (*)(...); //how to achieve it?
CThread() = default;
~CThread() = default;
CThread(const PFunc pFunc) :
m_bRunning(false),
m_pFunc(pFunc){
};
protected:
void run()
{
m_bRunning = true;
while (m_bRunning) {
m_pFunc(...); //how to run this function pointer?
}
}
private:
std::atomic_bool m_bRunning;
PFunc m_pFunc;
};
CThread ct1(func1);
CThread ct2(func2);
ct1.run();
ct1.run();
预期结果:
func1
func2
class CThread: public QThread
{
Q_OBJECT
Q_DISABLE_COPY(CThread)
public:
using PFunc = std::function<void()>; //use std::function
CThread() = default;
~CThread() = default;
template<class F> //template here
CThread(F&& pFunc) :
m_bRunning(false),
m_pFunc(std::forward<F>(pFunc)){
};
protected:
void run()
{
m_bRunning = true;
while (m_bRunning) {
m_pFunc(); //call m_pFunc();
}
}
private:
std::atomic_bool m_bRunning;
PFunc m_pFunc;
};
CThread ct1(std::bind(func1,1));
CThread ct2(std::bind(func2,2,'a'));
ct1.run();
ct2.run();