我在这里有一个奇怪的场景...我有一个类可以对模板化基类进行多重继承,我希望在我的最终派生类中使用单个模板化实现来实现
模板化基础:
//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;模板?为什么?
答案 0 :(得分:0)
然而,似乎编译器认为bar和bar2缺少DoFoo()函数
这是对的。 foo::DoFoo
命名foo
成员函数。 final::DoFoo
命名成员模板,而不是成员函数。 final::DoFoo<int>
确定了一个成员函数的名称,该函数的定义是通过实例化该模板生成的,但成员函数的名称是final::DoFoo<int>
- 该点的尖括号只不过是它拼写的一部分。