【发布时间】:2009-08-23 12:32:09
【问题描述】:
我想专门研究以下成员函数:
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);
}
};
【问题讨论】:
-
不清楚你的意思。您是否想要在 T1 和 T2 是模板时应用的专业化?或者当它们是一些特定的模板时?或者当它们是模板,并且它们的参数是某些特定类型时?
-
我的意思是,我想将我的函数专门用于需要一些模板参数的其他特定类型(如 std::pair)。
标签: c++ templates specialization