从基类调用的模板函数

时间:2015-04-28 07:19:50

标签: c++

我有以下问题。

我有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中。但我想避免重复代码。 另一个解决方案是使用多态,但在那种情况下使用模板实例化不能达到目的。

0 个答案:

没有答案