我有以下问题。
我有C类,其模板函数f3定义如下。
template <class T>
void C::f3(T *obj)
{
//.......some code...
obj->f1();
}
我有两个类D1和D2。 D1具有函数D1 :: f1,D2具有函数D2 :: f1。这些不是多态的(不是虚函数)。 D1和D2来自B类,它包含一个共同的函数B :: f2。
void B::f2(C *obj)
{
//..........some code......
C->f3(this);
}
void D1::f2(C *obj)
{
B::f2(obj);
}
void D2::f2(C *obj)
{
B::f2(obj);
}
正如我所提到的,f1不是多态的。
现在假设我们有以下代码。
void myFunction(C *obj)
{
D1 *d1 = new D1();
d1->f2(obj);
/*The following is the call sequence.
D1::f2
B::f2
C::f3 //template function instatiated is C::f3(B *), whereas required is C::f3(D1*)
B::f1 //desired call D1::f1
}
上面是否有一种实例化C :: f3(D1 *)的简洁方法。 一种方法是将B :: f2的代码复制到D1 :: f2中。但我想避免重复代码。 另一个解决方案是使用多态,但在那种情况下使用模板实例化不能达到目的。