Изменить:
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>
{
};