QThread运行参数和类型数量未知的函数



我想写一个QThread函数
run函数中,while循环中有一个函数m_pFuncm_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();

最新更新