模板化成员函数能否实现两个基类的虚函数?

can a templated member function implement two base classes's virtual functions?

本文关键字:函数 两个 基类 成员 实现      更新时间:2023-10-16

ive在这里有一个奇怪的方案...我得到了一个班级,可以在我的最终派生类中使用单个模板实现来实现模板基类的多重继承,这是我想实现的

模板基础:

//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();}
};

我希望看到编译器将生成结构最终必须实现的两个虚拟函数,即BAR和BAR2的DOFOO版本。如果编译器能够看到模板的功能,则应是能够生成与两个虚拟功能原型匹配的模板函数。

然而,似乎编译器认为dofoo()函数(对于bar和bar2)丢失了,用"以下虚拟函数在"错误"中纯化"错误。

我缺少关于语法的东西吗?或者,这是我对继承&amp;模板?为什么?

然而,似乎编译器认为dofoo()功能,bar和bar2缺少

是正确的。foo::DoFoo名称foo成员函数。final::DoFoo命名成员模板,而不是成员函数。final::DoFoo<int>确实命名了一个成员函数,其定义是通过实例化模板而生成的,但是成员函数的名称为 final::DoFoo<int>-当时的角度括号不超过其拼写方式的一部分。