Chciałbym zaprojektować klasę, która tworzy typy wewnętrzne, które są wariantami typów przekazywanych jako parametry szablonu. Coś jak następujący, niefunkcjonalnych przykład:Zmiana parametrów szablonu szablonu w 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> >
Od Base
jest w pełni określony typ, Base<RefinedType> refinedStorage;
nie uda się skompilować. Po prostu użycie parametru szablonu szablonu nie będzie działać, ponieważ zaawansowany typ musi być oparty na parametrze zagnieżdżonego szablonu, jak również na jego typie podstawowym.
W jaki sposób mogę zaimplementować ten wzorzec tworzenia typów na podstawie w pełni określonych i podstawowych typów parametru szablonu?
EDYCJA: Chciałbym, aby był to układ złożony z dowolnych głębokości, z wieloma typami wtryskiwaczy wykonującymi kaskadę transformacji. Zatem przekazanie zarówno parametru szablonu szablonu, jak i podstawowego parametru staje się dość nieporęczne (szczególnie gdy chodzi o radzenie sobie z podstawowym przypadkiem kompozytu), a idealne rozwiązanie korzystałoby z bardziej bezpośredniej składni.
Dlaczego nie zrobisz to parametr szablonu szablon _i_ parametr T, które mają być użyte jako 'Injector'? –
Petr
@Petr Zastanowiłem się nad tym, ale najlepiej byłoby ustawić to jako kompozycję o dowolnej głębokości, ze zmianami rozprzestrzeniającymi się przez wiele warstw. –