模板定义语法

template definitions syntax

简短的问题,这些定义是否相同?

1.

    template<class T1>
    template<class T2>
    void function(T1 *a, T2*b);

2.

    template<class T1,class T2>
    void function(T1 *a, T2*b);

不,它们不一样。第一种情况不会编译为自由函数 (live example)。通常你会做第一种情况,当你有一个模板 class 并且你有一个函数接受另一个模板参数

template <typename T1>
class Foo
{
public:
    template<typename T2>
    void function(T1 *a, T2*b);
};

template<class T1>
template<class T2>
void Foo<T1>::function(T1 *a, T2*b);

你的第二个例子作为一个有两个模板参数的函数就很好。