将Class Memeber函数传递给不同的类

时间:2017-06-05 16:32:49

标签: c++ class

我确信这可以做到,但看起来真的很复杂,所以我会尽力解释。

我有一个基础课

class TestClass {
public:

    void Test1(int a) { cout << "You chose option 1. The answer is " << a << "\n"; }
    void Test2(int b) { cout << "You chose option 2. The answer is " << b << "\n"; }
    void Run(int i) {
        if (i == 0) {
            Test1(2);
        }
        else {
            Test1(5);
        }
    }
};

还有一个二级课程

class ExecuteFunctions {
public:
    template<class _Fn, class... _Args>
    void CPU(_Fn&& _Fx, _Args&&... _Ax);
};

template<class _Fn, class... _Args>
void ExecuteFunctions::CPU(_Fn&& _Fx, _Args&&... _Ax)
{
    _Fx(forward<_Args>(_Ax)...);
}

但是当我尝试使用main中的execute类调用TestClass :: Run时,它不会编译说它与参数列表不匹配。

Execute.CPU(TestClass::Run,Option);

我可以在没有ExecuteClass的情况下调用该函数,也可以在新线程中调用它

int Option = 1;
TestClass T;
thread TestThread(&TestClass::Run, &T, Option);

我试图做的事实可能吗?

1 个答案:

答案 0 :(得分:2)

你需要有一个对象实例来调用你的run方法,只是_Fx(forward<_Args>(_Ax)...);是不够的。修复方法如下:

ExecuteFunctions Execute;
int Option = 1;
TestClass T;
Execute.CPU(std::bind(&TestClass::Run, &T, std::placeholders::_1),Option);