是否可以使用包含模板元素的类成员数组

时间:2013-12-15 18:48:17

标签: c++ arrays class templates stack

我想知道是否有可能有一个带有模板元素的类成员数组。我想做的事情如下。

#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;
}

这可能吗?

2 个答案:

答案 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::vectorstd::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;
}