我需要一个指向基类中成员函数的指针数组,如
class Base {
public:
typedef int(Base::*func)();
func f[3];
Base();
void run();
};
void Base::run()
{
cout << (this->*f[0])() << endl;
cout << (this->*f[1])() << endl;
cout << (this->*f[2])() << endl;
}
函数run()对于所有子类都是相同的。但是数组f []中的指针将引用将在子类中定义的成员函数。
class Child: public Base {
public:
typedef int(Child::*func)();
func f[3];
int A();
int B();
int C();
Child();
};
int Child::A()
{
return 1;
}
int Child::B()
{
return 2;
}
int Child::C()
{
return 3;
}
Child::Child()
{
f[0] = &Child::A;
f[1] = &Child::B;
f[2] = &Child::C;
}
如果我在程序中运行此代码,我会遇到问题
Child x;
x.run();
怎么做?
答案 0 :(得分:0)
你在这里遇到两个主要障碍。
一,你永远不会初始化Base::f
,但run
就是这样做的。您在子类中声明成员f
并在构造函数中初始化它。 Base
类f
永远不会被初始化,并且充满了垃圾。当您致电run
时,它会尝试使用这些随机值。这是未定义的行为。
两个,int(Base::*)()
和int(Child::*)()
是两种截然不同且不兼容的类型。您看起来想要使用指向子函数的指针填充数组,并从基类调用它们。
有几种方法可以解决这个问题:
run
虚拟并在子类中实现它以调用函数。std::function
个对象而不是指针。答案 1 :(得分:0)
这有效:
render()