我确信这可以做到,但看起来真的很复杂,所以我会尽力解释。
我有一个基础课
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);
我试图做的事实可能吗?
答案 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);