È una cosa a tempo di compilazione. I tipi di parametri del modello devono essere noti al compilatore in fase di compilazione.
Detto questo, utilizzando determinate tecniche di meta-programmazione del modello, è possibile scegliere un tipo o un altro tempo di compilazione AT, ma solo se tutti i tipi possibili sono noti in fase di compilazione e solo se la condizione per selezionare un il tipo può essere risolto al momento della compilazione.
Ad esempio, utilizzando la specializzazione parziale è possibile selezionare un tipo in fase di compilazione sulla base di un numero intero:
template <typename T>
class Foo
{ };
template <int N>
struct select_type;
template<>
struct select_type<1>
{
typedef int type;
};
template<>
struct select_type<2>
{
typedef float type;
};
int main()
{
Foo<select_type<1>::type> f1; // will give you Foo<int>
Foo<select_type<2>::type> f2; // will give you Foo<float>
}
fonte
2009-11-14 22:26:30
Tutto è possibile. Ma quello che stai cercando di fare non è facile in C++. Se spieghi perché stai provando a farlo forse potremmo darti un consiglio migliore. –