具有不同数据类型的纯虚方法

Max*_*xpm 0 c++ oop inheritance templates virtual-functions

我正在为我的容器类创建一个基类,因此我可以维护一致的接口.它目前看起来像这样:

template <typename Datatype>
class BaseClass
{
    public:
    virtual Datatype Foo() = 0;
    virtual Datatype Bar() = 0;
};

template <typename Datatype>
class DerivedClass: public BaseClass<Datatype>
{
    public:

    virtual Datatype Foo()
    {
    }

    virtual Datatype Bar()
    {
    }
};
Run Code Online (Sandbox Code Playgroud)

然而,我的一些派生类,Foo()Bar()可能需要具有彼此不同的返回类型.如果基类中没有每个不同返回类型的模板参数,我如何为派生类提供一些改变这种东西的空间?

编辑:

派生类使用的类型可能完全不同且不变.实际上,除了方法名称之外,派生类不保证具有任何类型的共同点.

APr*_*mer 6

提供一个专门针对您需要不同结果的特征的特征.

template <typename Datatype>
struct BaseTraits
{
    typedef Datatype FooResult;
    typedef Datatype BarResult;
};

template <typename Datatype, typename Traits = BaseTraits<Datatype> >
class BaseClass
{
    public:
    virtual Traits::FooResult Foo() = 0;
    virtual Traits::BarResult Bar() = 0;
};
Run Code Online (Sandbox Code Playgroud)