C++ 如何告诉编译器我的朋友函数是函数模板

C++ 如何告诉编译器我的朋友函数是函数模板,c++,templates,stl,friend,C++,Templates,Stl,Friend,这是我的密码: #include <iostream> #include <cstddef> class alloc { }; template <class T, class Alloc = alloc, size_t BufSiz = 0> class deque { public: deque() { std::cout << "deque" << std::endl; } }; template <cla

这是我的密码:

#include <iostream>
#include <cstddef>

class alloc 
{

};

template <class T, class Alloc = alloc, size_t BufSiz = 0>
class deque
{
public:
    deque() { std::cout << "deque" << std::endl; }
};

template <class T, class Sequence = deque<T> >
class stack
{
public:
    stack() { std::cout << "stack" << std::endl; }
private:
    Sequence c;
    friend bool operator== <> (const stack<T, Sequence>&, const stack<T, Sequence> &);
    friend bool operator< <> (const stack<T, Sequence>&, const stack<T, Sequence>&);
};

template <class T, class Sequence>
bool operator== (const stack<T, Sequence>&x, const stack<T, Sequence>&y)
{
    return std::cout << "opertor == " << std::endl;
}

template <class T, class Sequence>
bool operator < (const stack<T, Sequence> &x, const stack<T, Sequence> &y)
{
    return std::cout << "operator <" << std::endl;
}

int main()
{
    stack<int> x; // deque stack
    stack<int> y; // deque stack

    std::cout << (x == y) << std::endl; // operator == 1
    std::cout << (x < y) << std::endl; // operator < 1
}
#包括
#包括
类alloc
{
};
模板
德克级
{
公众:
只需使用以下语法即可:

template<typename T1, typename Sequence1>
friend bool operator== (const stack<T1, Sequence1>&, const stack<T1, Sequence> &);

template<typename T1, typename Sequence1>
friend bool operator< (const stack<T1, Sequence1>&, const stack<T1, Sequence>&);
模板
friend bool运算符==(常数堆栈和,常数堆栈和);
模板
friend bool运算符<(常数堆栈和,常数堆栈和);
您需要第一个模板参数与T不同,第二个模板参数与Sequence不同,否则将隐藏类的模板参数

template<typename T1, typename Sequence1>
friend bool operator== (const stack<T1, Sequence1>&, const stack<T1, Sequence> &);

template<typename T1, typename Sequence1>
friend bool operator< (const stack<T1, Sequence1>&, const stack<T1, Sequence>&);