Нет вычеты. Давайте посмотрим на два места, где T
существует:
template<template<class T> class Abstractor>
class BuildFactory : public Abstractor<Copier>{ };
Это говорит о том, что BuildFactory
шаблон класса, который сам принимает шаблон класса, назвав его Abstractor
. Опять же, чтобы быть ясным: Abstractor
- это класс шаблон, а не экземпляр. Так что никаких вычетов вообще не происходит. Класс Abstractor<Copier>
имеет явный аргумент, так как вы называете Copier
.
T
на самом деле необязательно; вы могли бы написать:
template<template<class> class Abstractor>
class BuildFactory : public Abstractor<Copier>{ };
Теперь для другого кода:
template<class T>
class Destructor{ };
BuildFactory<Destructor> bd;
Опять же, вы передаете шаблон Destructor
, а не какой-то класс Destructor<T>
. Никакой дедукции не требуется.
Кроме того, невозможно вывести аргументы шаблона для шаблонов классов, так или иначе. : P
@RSahu Нет, это не так ... –
@RSahu Почему вы так думаете? Я только сделал предположение об этом. – stella
@LightnessRacesinOrbit Итак, каков правильный путь? – stella