重新分配虚函数是否合法
Is reassigning a virtual function legal
假设我有一个这样的class:
struct A{
virtual void someFunc() { }
};
是否可以将虚函数重新分配给另一个函数....这可能是可能的,因为它基本上在 class 中存储了一个函数指针,因此它可以是 virtual
。
我意识到是这样的:
void aRandomFunc();
A mya;
mya.someFunc = &aRandomFunc;
可能是不可能的,因为成员函数将 this
指针作为隐式参数。
但是是否可以将一个成员函数重新分配给另一个成员函数?
不,在任何情况下都不能重新分配功能。
但是,您可以重新分配函数指针,但这是否有用取决于您实际尝试做什么。 https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem
不,无法重新分配功能。
您可以做两件事来获得不同的函数行为:
- 使用函数指针。
- 继承此 class 并覆盖该函数。
很可能这两种方法都不是您遇到的问题的完美解决方案。
函数指针的示例可能是:
struct A{
virtual void (*pSomeFunc)(void);
};
...
A a;
a.pSomeFunc = &aRandomFunc;
a.pSomeFunc();
一个继承示例可能是:
struct AWithDifferentFuncAbility : public A {
virtual void someFunc() {
//some new functionality;
}
}
您应该尝试 std::function
,它可以满足您的需求。
这里是你如何使用这个 class:
struct A{
std::function<void()> someFunc = []{ /* default implementation */ };
};
然后你以后可以改成什么函数:
void aRandomFunc();
A mya;
mya.someFunc = &aRandomFunc;
或者甚至用另一个 lambda 代替它:
mya.someFunc = []{ /* another function */ };
假设我有一个这样的class:
struct A{
virtual void someFunc() { }
};
是否可以将虚函数重新分配给另一个函数....这可能是可能的,因为它基本上在 class 中存储了一个函数指针,因此它可以是 virtual
。
我意识到是这样的:
void aRandomFunc();
A mya;
mya.someFunc = &aRandomFunc;
可能是不可能的,因为成员函数将 this
指针作为隐式参数。
但是是否可以将一个成员函数重新分配给另一个成员函数?
不,在任何情况下都不能重新分配功能。
但是,您可以重新分配函数指针,但这是否有用取决于您实际尝试做什么。 https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem
不,无法重新分配功能。
您可以做两件事来获得不同的函数行为:
- 使用函数指针。
- 继承此 class 并覆盖该函数。
很可能这两种方法都不是您遇到的问题的完美解决方案。
函数指针的示例可能是:
struct A{
virtual void (*pSomeFunc)(void);
};
...
A a;
a.pSomeFunc = &aRandomFunc;
a.pSomeFunc();
一个继承示例可能是:
struct AWithDifferentFuncAbility : public A {
virtual void someFunc() {
//some new functionality;
}
}
您应该尝试 std::function
,它可以满足您的需求。
这里是你如何使用这个 class:
struct A{
std::function<void()> someFunc = []{ /* default implementation */ };
};
然后你以后可以改成什么函数:
void aRandomFunc();
A mya;
mya.someFunc = &aRandomFunc;
或者甚至用另一个 lambda 代替它:
mya.someFunc = []{ /* another function */ };