Vorrei progettare una classe che crea tipi interni che sono varianti di tipi passati come parametri del modello. Qualcosa come il seguente esempio, non funzionale:Modifica dei parametri del modello di modello in 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> >
Da Base
è un tipo completamente specificato, Base<RefinedType> refinedStorage;
mancheranno di compilazione. Semplicemente usando un parametro template template non funzionerà, poiché il tipo raffinato deve essere basato sul parametro del template annidato e sul suo tipo base.
Come è possibile implementare questo modello di creazione di tipi in base ai tipi completamente specificati e di base di un parametro di modello?
MODIFICA: mi piacerebbe che fosse un composito a profondità arbitraria, con più tipi di iniettori che eseguono una cascata di trasformazioni. Quindi, passare sia il parametro template template che il parametro base diventa piuttosto ingombrante (in particolare quando si tratta di trattare il caso base del composito), e una soluzione ideale userebbe la sintassi più diretta.
Perché non vuoi renderlo un parametro di template _and_ parametro T, da utilizzare come 'iniettore'? –
Petr
@Petr Ci ho pensato, ma idealmente mi piacerebbe impostare questo come un composito di profondità arbitraria con modifiche che si propagano attraverso più livelli. –