Я хотел бы создать класс, который создает внутренние типы, которые являются вариантами типов, передаваемых в качестве параметров шаблона. Что-то вроде следующего, нефункционального примера:
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: Я хотел бы, чтобы это был композит с произвольной глубиной, с несколькими типами инжекторов, выполняющими каскад преобразований. Таким образом, передача параметра шаблона шаблона и базового параметра становится довольно громоздкой (особенно когда дело касается базового случая композита), и идеальное решение будет использовать более прямой синтаксис.