1, 根据输入决定模板类型
template <class T, class T1>
T bbb(T a, T1 b)
{
return a+b;
}
int main()
{
return bbb(3, 7.5);
}
2, 部分类型指定, 部分类型由输入决定
template <class T1, class T2>
T1 Func(const T2& p1) {
return p1;
}
int main()
{
return Func<int>(3.14);
}
3, 匹配任意类型的类成员函数
template <class ObjectT, class R, class P1>
R Bind1(
R (ObjectT::*method)(P1),
ObjectT* object,
P1 p1)
{
return (object->*method)(p1);
}
template <class ObjectT, class R, class P1, class P2>
R Bind2(
R (ObjectT::*method)(P1, P2),
ObjectT* object,
P1 p1,
P2 p2)
{
return (object->*method)(p1, p2);
}
class A
{
public:
int f(int a)
{
return 0;
}
double f(int a, double b)
{
return a;
}
};
int main()
{
A bb;
int ret1 = Bind1(&A::f, &bb, 123);
double ret2 = Bind2(&A::f, &bb, 123, 345.3242);
}