Я хотел бы создать класс, который создает внутренние типы, которые являются вариантами типов, переданных в качестве параметров шаблона. Что-то вроде следующего, нефункциональных например:Изменение параметров шаблона шаблона в C++
template <typename T>
class BaseClass
{
public:
typedef T InternalType;
std::vector<InternalType> storage;
};
template <typename Base>
class Injector
{
public:
typedef std::pair<typename Base::InternalType, typename Base::InternalType> RefinedType;
Base<RefinedType> refinedStorage;
};
typedef Injector<BaseClass<int> > InjectedInt; // Should store vector<pair<int, int> >
Поскольку Base
является полностью указанным типом, Base<RefinedType> refinedStorage;
не будет компилироваться. Просто использование шаблона шаблона не будет работать, так как уточненный тип должен основываться на параметре вложенного шаблона, а также на его базовом типе.
Как реализовать этот шаблон создания типов на основе как полностью заданных, так и базовых типов параметра шаблона?
EDIT: Я хотел бы, чтобы это был композит с произвольной глубиной, с несколькими типами инжекторов, выполняющими каскад преобразований. Таким образом, передача параметра шаблона шаблона и базового параметра становится довольно громоздкой (особенно когда дело касается базового случая композита), и идеальное решение будет использовать более прямой синтаксис.
Почему вы не сделать шаблон параметр шаблона _и_ параметра T, который будет использоваться как 'Injector'? –
Petr
@Petr Я подумал об этом, но в идеале я хотел бы установить его как композит с произвольной глубиной с изменениями, распространяющимися через несколько слоев. –