我正在写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_AC
,f_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的对象并执行...
这应该做: