是否可以有一个带有模板元素的类成员数组

Is it possible to have a class member array with template elements

本文关键字:元素 成员 数组 有一个 是否      更新时间:2023-10-16

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

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

这可能吗?

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

您可以这样做,因为模板是在类实例化之前求值的。为什么不用编译器测试它呢?

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左右。