gpt4 book ai didi

c++ - C++ 中的多重分派(dispatch)

转载 作者:IT老高 更新时间:2023-10-28 12:32:40 28 4
gpt4 key购买 nike

我想了解什么是多次调度。我阅读了很多不同的文本,但我仍然不知道多重调度是什么以及它有什么好处。也许我缺少的是使用多次调度的一段代码。拜托,你能用 C++ 编写一小段代码,使用多次调度,这样我就可以看到它不能正确编译/运行,因为 C++ 只有一次调度?我需要看到区别。谢谢。

最佳答案

多调度是根据传递给函数调用的参数的运行时类型选择调用哪个版本的函数的能力。

这是一个在 C++ 中无法正常工作的示例(未经测试):

class A { };
class B : public A { };
class C : public A { }


class Foo
{
virtual void MyFn(A* arg1, A* arg2) { printf("A,A\n"); }
virtual void MyFn(B* arg1, B* arg2) { printf("B,B\n"); }
virtual void MyFn(C* arg1, B* arg2) { printf("C,B\n"); }
virtual void MyFn(B* arg1, C* arg2) { printf("B,C\n"); }
virtual void MyFn(C* arg1, C* arg2) { printf("C,C\n"); }
};

void CallMyFn(A* arg1, A* arg2)
{
// ideally, with multi-dispatch, at this point the correct MyFn()
// would be called, based on the RUNTIME type of arg1 and arg2
pFoo->MyFn(arg1, arg2);
}

...

A* arg1 = new B();
A* arg2 = new C();
// Using multi-dispatch this would print "B,C"... but because C++ only
// uses single-dispatch it will print out "A,A"
CallMyFn(arg1, arg2);

关于c++ - C++ 中的多重分派(dispatch),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1749534/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com