如何在类内部声明模板的朋友函数并实现此朋友函数ouside类?

问题描述 投票:0回答:1

嗯,我正在尝试在C ++中的第一个Stack上实现copy_and_swap惯用语,为此,我需要创建一个swap函数,并且该swap函数必须是一个朋友函数,我尝试通过这种方式来做到这一点:] >

template <class T>
class Stack {
    private:
        int top;
        T* a;
        int MAX;

    public:
        Stack(int MAX);
        Stack(Stack<T>& s);
        bool push(T x);
        bool pop();
        T peek();
        bool isEmpty();
        friend void swap(Stack<T>& f, Stack<T>& s);
        ~Stack();
};

template <class T>
void Stack<T>::swap(Stack<T>& f, Stack<T>& s){
//I will put something where yet.
}

但是,VSCode谈到了交换功能:类模型“ Stack”没有“ swap”成员(我翻译成英文,我的VSCode用葡萄牙语运行。

如何在不收到此错误的情况下做到这一点?

[Well,我正在尝试在C ++中的第一个Stack上实现copy_and_swap惯用语,为此,我需要创建一个swap函数,并且此swap函数必须是一个好友函数,因此我试图通过它来实现...

c++ templates stack swap friend
1个回答
0
投票

您的朋友函数不是模板,因此要在外部定义,您必须为每种类型定义非模板函数(这似乎不可行::]]

void swap(Stack<int>& lhs, Stack<int>& rhs){/*..*/}
void swap(Stack<char>& lhs, Stack<char>& rhs){/*..*/}
void swap(Stack<MyType>& lhs, Stack<MyType>& rhs){/*..*/}
© www.soinside.com 2019 - 2024. All rights reserved.