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

QThread run function with unknown number of arguments and types

我正在尝试编写一个 QThread 函数。
run 函数中有一个函数 m_pFunc 而 loop.The 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();