Я хочу специализировать следующую функцию-член:
class foo {
template<typename T>
T get() const;
};
К другому классу bar
, что также зависит от шаблонов.
Например, я бы хотел, чтобы bar
было std::pair
с некоторыми параметрами шаблона, что-то вроде этого:
template<>
std::pair<T1,T2> foo::get() const
{
T1 x=...;
T2 y=...;
return std::pair<T1,T2>(x,y);
}
Где T1 и T2 также являются шаблонами. Как это может быть сделано? Насколько я знаю, это должно быть
возможно.
Так что теперь я могу позвонить:
some_foo.get<std::pair<int,double> >();
Полный / окончательный ответ:
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);
}
};