我想知道是否有可能有一个带有模板元素的类成员数组。我想做的事情如下。
#ifndef _STACK_H_
#define _STACK_H_
#include <exception>
using namespace std;
template<typename T>
class stack
{
public:
stack();
void push(T data);
void pop();
T top();
bool is_empty();
bool is_full();
private:
int elem_max;
int elem_num;
T elem_array[elem_max];
};
#include "stack.template.cc"
#endif
然后在我的主程序中有类似的东西:
#include <iostream>
#include "stack.h"
using namespace std;
int main()
{
stack<int> one;
one.push(10);
return 0;
}
这可能吗?
答案 0 :(得分:0)
您可以这样做,因为模板是在实例化类之前进行评估的。为什么不用编译器测试呢?
template <typename T>
class Stack
{
static const size_t MAX_STACK = 1024;
T m_Buffer[MAX_STACK];
public:
// ...
};
编译没有问题。
主要问题是,您需要在COMPILE TIME确定的数组大小,而不是RUNTIME。在这里,我使用static const
来使其工作。如果您需要灵活的阵列,请考虑使用std::vector
或std::list
左右。
答案 1 :(得分:0)
template<typename T,size_t MAX_CAPACITY=16> //change 16 to whatever you want
class stack
{
public:
stack();
void push(const T &data);
void pop();
T& top();
const T& top()const;
bool is_empty()const;
bool is_full()const;
private:
size_t elem_num;
T elem_array[MAX_CAPACITY];
};
int main()
{
stack<int> one; //stack of ints with maximum capacity of 16
one.push(10);
stack<int,1024> two; //stack of ints with maximum capacity of 1024
two.push(10);
return 0;
}