模板化成员函数可以实现两个基类的虚函数吗?

时间:2014-03-12 01:59:51

标签: c++ templates inheritance

我在这里有一个奇怪的场景...我有一个类可以对模板化基类进行多重继承,我希望在我的最终派生类中使用单个模板化实现来实现

模板化基础:

//simple class with a pure virtual function DoFoo()
template <typename T> 
struct foo
{
    virtual T DoFoo() = 0;
};

base2:

//a simple class that inherits from foo, but does not implemented DoFoo()
struct bar {};
struct base2 : public foo<bar> 
{

};

最终派生类:

//a class that inherits from base2, and foo<bar2>, 
//that needs an implementation of DoFoo for both bar and bar2 types. 
struct bar2{};
struct final : public base2, public foo<bar2> 
{
     template <T>
     T DoFoo(){ return T();}

};

我希望看到编译器会生成struct final必须实现的两个虚函数,bar和bar2的DoFoo版本。模板化函数,如果编译器能够看到它,应该是能够生成匹配两个虚函数原型的模板化函数。

然而,看起来好像编译器认为bar和bar2的DoFoo()函数丢失了,用&#34;因为以下虚拟功能在&#34;错误。

我错过了语法方面的内容吗?或者这是一个与继承有关的不可能的情况&amp;模板?为什么?

1 个答案:

答案 0 :(得分:0)

  

然而,似乎编译器认为bar和bar2缺少DoFoo()函数

这是对的。 foo::DoFoo命名foo成员函数。 final::DoFoo命名成员模板,而不是成员函数。 final::DoFoo<int>确定了一个成员函数的名称,该函数的定义是通过实例化该模板生成的,但成员函数的名称是final::DoFoo<int> - 该点的尖括号只不过是它拼写的一部分。