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声明错误而抱怨声明的模板参数太少。
更改:
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)