函数必须具有通用接口,但必须根据传递的子类(在不知道它们是什么的情况下)表现出不同的行为-C ++

问题描述 投票:1回答:1

我正在写C ++。

我有一个从基类继承的不同类(例如,A,B,C,D都从Z继承)。

我想编写一个函数,该函数接受2个类型(超类型)Z的对象并执行一些操作。 (例如,我可能有f(a, b)f(c,d),其中a,b,c,d分别为A,B,C,D类型。)]

我希望(函数的)接口通用(没有f_AB(a,b)f_CD(c,d))。

但是,实现可能(并且确实)根据所采用的类而有所不同。(例如,我确实有f_AB做一些AB特定的操作,f_CD做一些CD特定的操作,以及f_ACf_BC等)

子类具有完全不同的数据,并且根据我比较的类,具体操作完全不同。

当我使用此函数时,我不知道2个参数的特定子类。假设我正在做类似的事情

for p in Z {
  for q in Z
    f(p, q) # p and q could be of any subclass of Z! and f must behave accordingly!
}

在C ++中解决此问题的最佳方法是什么?我无法结合多态,虚拟方法,重载和动态强制转换来完全解决问题。

如果无法解决,是否可以通过放弃一些假设来解决? (就像使用继承一样,使用泛型引用遍历我的对象实际上只需要继承)

我正在写C ++。我有从基类继承的不同类(例如,A,B,C,D都从Z继承)。我想编写一个函数,该函数接受2个类型(超类型)Z的对象并执行...

c++ dynamic polymorphism overloading dynamic-cast
1个回答
0
投票

这应该做:

© www.soinside.com 2019 - 2024. All rights reserved.