C++ - 模板和数据类型

C++ - Templates and Data Types

我是 C++ 的新手,正在尝试创建一个可以接受任何输入的 "Generic Class"。

我需要一种方法来将我的 class 接收到的任何输入存储在数组或向量中。然而,我正在努力弄清楚如何做到这一点。

我试图在我的 .cpp 文件中这样做:

template<typename T> T data[5];
template<typename T> vector<T> vect;

这是我的头文件的样子:

#include <vector>

using namespace std;

template <class T> class Stack {

public:

    void push(T x);

    T peek();
    T pop();

    int size();
    bool contains();


private:

    vector<T> data;

};

但这显然是行不通的,我被告知我正在做的事情是不可能的?我如何才能创建一个数组或向量来存储我的 class 收到的任何内容?

我对此很陌生,所以对于愚蠢的错误和/或误解表示歉意。

试试这个。我在这里使用 vector 来存储数据。将其存储在 .cpp 文件中并编译和执行。

你有那些函数声明。您将在此处获得函数体。

#include<iostream>
#include<vector>
using namespace std;

template <class T>
class Stack{
private:
    vector<T> elems;
public:
    void push(T);
    T pop();
    T peek(); 
};

template<class T>
void Stack<T>:: push(T obj){
    elems.push_back(obj);
}

template<class T>
T Stack<T>::pop(){
    if(!elems.empty()){
        T temp = elems.back();
        elems.pop_back();
        return temp;
    }
}

template<class T>
T Stack<T>::peek(){
    if(!elems.empty())
        return elems.back();
}

int main(){
    Stack<float> S;
    S.push(5.42);
    S.push(3.123);
    S.push(7.1);
    cout << S.pop() << endl;
    S.pop();
    cout << S.peek() << endl;
    return 0;
}

输出

7.1
5.42