比较以下代码 C ++:
#include <iostream>
#include <vector>
struct A
{
virtual void bar(void) { std::cout << "one" << std::endl; }
};
struct B : public A
{
virtual void bar(void) { std::cout << "two" << std::endl; }
};
void test(std::vector<A*> objs, void (A::*fun)())
{
for (auto o = objs.begin(); o != objs.end(); ++o)
{
A* obj = (*o);
(obj->*fun)();
}
}
int main()
{
std::vector<A*> objs = {new A(), new B()};
test(objs, &A::bar);
}
并在 蟒蛇:
class A:
def bar(self):
print("one")
class B(A):
def bar(self):
print("two")
def test(objs, fun):
for o in objs:
fun(o)
objs = [A(), B()]
test(objs, A.bar)
该 C ++ 代码将打印:
one
two
而 蟒蛇 代码将打印
one
one
如何传递“指向方法的指针”并将其解析为被覆盖的方法,在Python中实现与C ++相同的行为?
添加一些上下文并解释为什么我最初考虑这种模式。我有一个由可以子类化的节点组成的树。我想创建一个通用的图遍历函数,它接受图的节点以及可能在图节点的子类中被覆盖的函数。给定为相邻节点计算的值,该函数计算节点的某个值。目标是返回为给定节点计算的值(需要遍历整个图形)。