草庐IT

multiple-dispatch

全部标签

c++ - 苹果、橘子和指向最派生的 c++ 类的指针

假设我有一堆水果:classFruit{...};classApple:publicFruit{...};classOrange:publicFruit{...};以及一些对所述水果进行​​操作的多态函数:voidEat(Fruit*f,Pesticide*p){...}voidEat(Apple*f,Pesticide*p){ingest(f,p);}voidEat(Orange*f,Pesticide*p){peel(f,p);ingest(f,p);}好的,等等。停在那儿。请注意,任何理智的人都会将Eat()设为Fruit类的虚拟成员函数。但这不是一个选择,因为我不是一个理智的人

c++ - 独立于模板参数位置的专用模板分派(dispatch)

我遇到过需要一个模板函数的问题,只要它的模板参数相同且与位置无关,它就会具有相同的输出。假设总是有两个参数。我有一个函数:templateintfunc();我想要func()和func()调用相同的代码。我想到了一个我想避免使用的宏,但我需要在两种类型相同时不要重复代码。所以一个宏,例如:#defineDEF_TEMPL_IMPL(lhs,rhs,ret)\template\autofunc(){returnret;}\template\autofunc(){returnfunc();}编译失败因为DEF_TEMPL_IMPL(float,float,3)会导致重新定义func我认为

c++ - 为什么 C++ 不允许您请求指向最派生类的指针?

(这个问题应该引用Stroustrup来回答。)能够请求指向最派生类的指针似乎非常有用,如下所示:classBase{...};classDerivedA{...};classDerivedB{...};classProcessor{public:voidDo(Base*b){...}voidDo(DerivedA*d){...}voidDo(DerivedB*d){...}};listthings;Processorp;for(list::iteratori=things.begin(),e=things.end();i!=e;++i){p.Do(CAST_TO_MOST_DERIV

c++ - 我可以只用事件、互斥量和信号量实现公平的 "wait on multiple events"吗?

在只有事件[1]、互斥锁和信号量[2]的平台上,我可以创建一个公平的“等待多个事件”实现,当任何事件[3]发出信号/设置时返回。我假设现有的原语是公平的。[1]事件是具有4个操作的“标志”:Set()、Clear()、Wait()和WaitAndClear()。如果你在一个未设置的事件上等待(),你会阻塞直到有人设置()它。WaitAndClear()听起来像,但是原子的。所有服务员都被唤醒。[2]我认为系统不支持负值的信号量。[3]我说的是“事件”,但它可能是使用任何这些原语的新对象类型。 最佳答案 对于window,WaitFo

c++ - 从 IRQL=DISPATCH_LEVEL (KbFilter/KMDF) 发送 IOCTL

我正在使用WDK中的KbFilter示例,尝试在由KbFilter_ServiceCallback调用并因此在DISPATCH_LEVEL执行的函数中发送IOCTL。该函数只需发送一个IOCTL并返回,而不是等待输出缓冲区被填充,因此它可以是异步的,即触发即忘。我目前正在使用WDF函数WdfIoTargetFormatRequestForIoctl和WdfRequestSend尝试在DISPATCH_LEVEL发送,但什么也没得到。对WdfRequestSend的调用成功,但似乎未收到IOCTL。使用WdfIoTargetSendIoctlSynchronously或WDM模式IoBu

c++ - 什么合法代码可以触发 C4523 "multiple destructors specified"Visual C++ 警告?

根据MSDN,VisualC++可以发出C4523warning'class':指定了多个析构函数。怎么可能出现这种情况?我尝试了以下方法:classClass{~Class();~Class(int);};这会产生一个析构函数必须有一个'void'参数列表错误和C4523警告以及以下内容classClass{~Class();~Class();};这会产生成员函数已经定义或声明错误以及以下内容classClass{int~Class();~Class();};这会产生析构函数不能有返回类型错误。那么我如何有C4523警告但没有错误呢? 最佳答案

c++ - 双重分派(dispatch)和模板类

我有一个C++代码,我在其中比较从一个公共(public)母类派生的不同类,Foo.如果两个类没有相同的类型,比较总是false.否则,它会比较特定于该类的一些内部数据。我的代码是这样的:classBar;classBaz;classFoo{public:virtualboolisSame(Foo*)=0;virtualboolisSameSpecific(Bar*){returnfalse;}virtualboolisSameSpecific(Baz*){returnfalse;}};classBar:publicFoo{public:boolisSame(Foo*foo){retu

c++ - 这些 g++ "multiple definition"错误是怎么回事?

我正处于一个项目的早期阶段(阅读:昨天才开始),我正在设置我的初始makefile。这非常简单。以下是文件的完整内容:all:main.oresource.og++-ooutput.exemain.oresource.omain.o:main.cppmain.hresource.hg++-mwindows-omain.omain.cppresource.o:resource.rcwindresresource.rcresource.oclean:rm*.o在这一点上,我认为重要的是要提到我正在Windows上工作,所以我在Powershell中使用MinGWg++4.5.2或使用Cyg

c++ - C++菱形继承(钻石问题)中如何调用所有基类的拷贝构造函数来拷贝大部分派(dispatch)生类对象?

考虑下面的代码:#includeusingnamespacestd;classA{public:A(){cout程序的输出如下:13571358因此,对于行Dd(d1)D的拷贝构造函数正在调用类。在继承过程中,我们需要显式调用基类的复制构造函数,否则只会调用基类的默认构造函数。到这里我才明白。我的问题:现在我想在Dd(d1)期间调用所有基类的复制构造函数执行。为此,如果我在下面尝试D(constD&obj):A(obj),B(obj),C(obj){cout然后我得到这个错误:错误:'classAA::A'isinaccessiblewithinthiscontext如何解决这个问题。

c++ - 如何从 dispatch_apply (GCD) 循环写入数组?

我编写了代码来使用Runge-Kutta方法计算大量耦合主方程的动力学。代码包含很多for循环,其中每个步骤都是独立的。我打算使用GrandCentralDispatch来加速程序。我的尝试基于我在http://www.macresearch.org/cocoa-scientists-xxxi-all-aboard-grand-central找到的示例.我的代码和macresearch上的示例都不能在我的机器上编译(MacOSX10.6.8Xcode4.0.2)。所以这是我的代码:...doublevalues[SpaceSize],k1[SpaceSize];for(intt=1;t