Hom*_*lus 5 c++ templates data-structures c++11
如何对模板构造函数进行专门化?为了更好的理解,我举一个代码示例:
template<typename T>
class Stack {
private:
int nelem;
int size;
vector<T> stack;
public:
~Stack();
Stack<T>(int t);
void push(T data);
T pop();
T top();
int getPosTop(){return (nelem--);};
void cleanStack(){nelem = 0;};
bool StackEmpty(){ return (nelem == 0);};
bool StackFull(){ return (nelem == size);};
};
template <typename T> // constructor definition here
Stack<T>::Stack<T>(int t){
size = t;
nelem = 0;
};
int main(){
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它有很多错误。然后,我读到另一篇文章,一些建议,它正在取代
template <typename T>
Stack<T>::Stack<T>(int t){
Run Code Online (Sandbox Code Playgroud)
到
template <typename T> template <typename T> Stack<T>::Stack<T> (int t){
Run Code Online (Sandbox Code Playgroud)
这还不够。
我缺少什么?而且,其背后的想法是什么?
您想知道如何专门Stack<T>::Stack
针对 的特定值构建构造函数T。您按照图示进行操作:-
#include <vector>
#include <iostream>
template<typename T>
class Stack {
private:
std::size_t nelem;
std::size_t size;
std::vector<T> stack;
public:
~Stack(){};
Stack<T>(std::size_t n);
void push(T data);
T pop();
T top();
std::size_t getPosTop(){return (nelem--);};
void cleanStack(){nelem = 0;};
bool StackEmpty(){ return (nelem == 0);};
bool StackFull(){ return (nelem == size);};
};
template <typename T>
Stack<T>::Stack(std::size_t t){
size = t;
nelem = 0;
std::cout << "Constructing a `Stack<T>`\n";
}
template <>
Stack<std::string>::Stack(std::size_t t){
size = t;
nelem = 0;
std::cout << "Constructing a `Stack<T>` with `T` = `std::string`\n";
}
template <>
Stack<int>::Stack(std::size_t t){
size = t;
nelem = 0;
std::cout << "Constructing a `Stack<T>` with `T` = `int`\n";
}
int main() {
Stack<float> sf{2};
Stack<int> si{3};
Stack<std::string> ss{4};
sf.cleanStack();
si.cleanStack();
ss.cleanStack();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
哪个输出:-
Constructing a `Stack<T>`
Constructing a `Stack<T>` with `T` == `int`
Constructing a `Stack<T>` with `T` == `std::string`
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2541 次 |
| 最近记录: |