我有如下代码,其中
现在我想修改这个代码,以实现以下目标:
如果我按照现有的代码编译,显然会出现以下错误:
- "no matching function for call to 'Test::execute(void (Test::*)())'" - "no known conversion for argument 1 from 'void (Test::)()' to 'void (TestRunner::)()'"
请问是否有人能够指导我正确的方向,或者我需要完全改变做法才能实现我的目标?
execute()
方法接受一个函数作为参数并执行它。然后,start()
方法调用execute()
以运行method1()
。class Test
{
int Test::start(void)
{
execute(&Test::method1);
return 1;
}
void Test::execute(void(Test::*func)(void))
{
(this->*func)();
}
void Test::method1(void)
{
//Do something...
}
}
现在我想修改这个代码,以实现以下目标:
- 创建一个名为
TestRunner
的基类,并将execute()
方法移到该类中。 - 让
Test
继承自TestRunner
,并在其中调用execute()
方法来运行其本地方法。
execute()
方法参数上,即我现在的TestRunner::*func
。class TestRunner
{
public:
TestRunner()
{
//Do something...
}
protected:
void execute(void(TestRunner::*func)(void))
{
(this->*func)();
}
}
class Test : TestRunner
{
public:
Test() : TestRunner()
{
}
int start()
{
TestRunner::execute(&Test::method1);
return 1;
}
private:
void method1(void)
{
//Do something
}
}
如果我按照现有的代码编译,显然会出现以下错误:
- "no matching function for call to 'Test::execute(void (Test::*)())'" - "no known conversion for argument 1 from 'void (Test::)()' to 'void (TestRunner::)()'"
请问是否有人能够指导我正确的方向,或者我需要完全改变做法才能实现我的目标?
virtual
成员函数来实现。 - R SahuTestRunner::execute(&Test::method1);
,而是使用TestRunner::execute(static_cast<void(Test::*)(void)>(&Test::method1));
。static_cast<>
告诉编译器你知道自己在做什么。记得将你的方法设为虚函数。 - Maelkum