是否可以继承像下面这样的专门结构/类?
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)
{
}
};
我在TicketContainer
声明中收到错误,抱怨声明的模板参数太少。
答案 0 :(得分:5)
变化:
struct TicketContainer : public Container<std::string>
为:
struct TicketContainer : public Container<int, std::string>
或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>
{
};