voglio specializzarmi seguente funzione membro:template specializzazione della classe template
class foo {
template<typename T>
T get() const;
};
Per altra classe bar
che dipende da modelli pure.
Per esempio, vorrei bar
essere std::pair
con alcuni parametri di modello, qualcosa di simile:
template<>
std::pair<T1,T2> foo::get() const
{
T1 x=...;
T2 y=...;
return std::pair<T1,T2>(x,y);
}
Dove T1 e T2 sono modelli pure. Come si può fare? Per quanto ne so dovrebbe essere possibile.
Così ora posso chiamare:
some_foo.get<std::pair<int,double> >();
La piena risposta definitiva /:
template<typename T> struct traits;
class foo {
template<typename T>
T get() const
{
return traits<T>::get(*this);
}
};
template<typename T>
struct traits {
static T get(foo &f)
{
return f.get<T>();
}
};
template<typename T1,typename T2>
struct traits<std::pair<T1,T2> > {
static std::pair<T1,T2> get(foo &f)
{
T1 x=...;
T2 y=...;
return std::make_pair(x,y);
}
};
Non è chiaro cosa intendi. Vuoi una specializzazione che si applica ogni volta che T1 e T2 sono modelli? O quando sono un modello specifico? O quando sono modelli, e il loro parametro è di alcuni tipi specifici? – jalf
Voglio dire, che voglio specializzare la mia funzione per un altro tipo specifico (come std :: pair) che ha bisogno anche di alcuni parametri del template. – Artyom
Si prega di controllare questo: http://stackoverflow.com/questions/947943/template-specialisation-where-templated-type-is-also-a-plate –