从专门的模板结构/类继承

use*_*762 3 c++ inheritance template-specialization

是否可以继承如下的专用结构/类?

template<class TKey, class TData>
struct Container
{
    virtual void Add(TKey key, TData data) = 0;
};

template<class TData>
struct Container<int, TData>
{
    virtual void Add(int key, TData data) = 0;
};

struct TicketContainer : public Container<std::string>
{
    void Add(int key, std::string data)
    {
    }
};
Run Code Online (Sandbox Code Playgroud)

我在TicketContainer声明错误而抱怨声明的模板参数太少。

hmj*_*mjd 5

更改:

struct TicketContainer : public Container<std::string>
Run Code Online (Sandbox Code Playgroud)

至:

struct TicketContainer : public Container<int, std::string>
Run Code Online (Sandbox Code Playgroud)

或其他类型TKey

即使提供了部分专业化知识,Container您仍然需要指定两个模板参数。

如果不想同时指定两个模板参数,则可以指定模板参数的默认类型。在这种情况下,您将必须重新排序,TKey并且TValue (由于通常会key随后声明关联容器,因此可能会很直观value):

// Reordered 'TData' and 'TKey'.
template<class TData, class TKey = int>
struct Container
{
    virtual void Add(TKey key, TData data) = 0;
};

template<class TData>
struct Container<TData> // Equivalent to 'struct Container<TData, int>'
{
    // This specialization seems pointless as it defines no
    // special behaviour.
    virtual void Add(int key, TData data) = 0;
};

struct TicketContainer : public Container<std::string>
{
};
Run Code Online (Sandbox Code Playgroud)