假设我有这样一个类:
struct A{
virtual void someFunc() { }
};
是否可以将虚函数重新分配给另一个函数....这可能是可能的,因为它基本上将一个函数指针存储在类中,以便它可以是virtual
。
我意识到这样的事情:
void aRandomFunc();
A mya;
mya.someFunc = &aRandomFunc;
可能是不可能的,因为成员函数将this
指针作为隐式参数。
但是可以将成员函数重新分配给另一个成员函数吗?
答案 0 :(得分:10)
不,在任何情况下都不能重新分配功能。
但是,您可以重新分配函数指针,但这是否有用取决于您实际尝试的操作。 https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem
答案 1 :(得分:3)
不,不可能重新分配功能。
你可以做两件事来获得不同的功能行为:
这些方法很可能都不是解决您遇到问题的优雅方法。
函数指针的示例可能是:
struct A{
virtual void (*pSomeFunc)(void);
};
...
A a;
a.pSomeFunc = &aRandomFunc;
a.pSomeFunc();
继承示例可能是:
struct AWithDifferentFuncAbility : public A {
virtual void someFunc() {
//some new functionality;
}
}
答案 2 :(得分:0)
你应该尝试std::function
,它会做一些接近你需要的东西。
以下是关于如何使用此课程的方法:
struct A{
std::function<void()> someFunc = []{ /* default implementation */ };
};
然后你可以改变以后的功能:
void aRandomFunc();
A mya;
mya.someFunc = &aRandomFunc;
甚至用另一个lambda代替它:
mya.someFunc = []{ /* another function */ };