我有以下两类:覆盖指针到成员函数
class A {
public:
A() { m_ptr = NULL; }
void (*m_ptr)();
void a() { if (m_ptr) m_ptr(); }
};
class B : public A {
public:
B() { m_ptr = b; }
void b() {
std::cout << "B::b() is called" << std::endl;
}
};
而且我想使用它们像这样:
B b;
b.a();
,并得到以下被称为B::b()
。
当然这是不是编译为B::b
不是void(*)()
类型。
我该如何让它工作?
UPDATE。谁问谁“为什么?”和“为了什么?”。
A类是一个非常基础的类,在生产代码中有许多后继者。 B类是第6个继任者,我想扩展A(最方便的地方),以便有更多的方法(来自B)可以存在,并且可能不在A和B的另一个继任者中。
虚拟方法与空身体可以采用,但它是丑陋的,我想避免它。抽象方法更是如此(因为现有的派生后继代码)。
我不想使用void(*)()类型的外部函数来不释放对所有层次结构的内部数据的访问。
你可能想看看['标准:: function'(http://en.cppreference.com/w/cpp/utility/functional/function)和['std :: bind'](http://en.cppreference.com/w/cpp/utility/functional/bind)。 –
你的问题是什么?到目前为止,你有一个声明 – harmic
我的问题是“如何?” – OlegG