是否可以有一个带有模板元素的类成员数组
Is it possible to have a class member array with template elements
我想知道是否有可能拥有一个带有模板元素的类成员数组。我想做的事情如下。
#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::vector
或std::list
左右。
相关文章:
- 使用并行参数向量调用元素向量的成员函数
- C++结构元素(成员变量)的数量
- 如何通过比较彼此的成员从QStringList中删除元素
- Getter 函数,用于在 2d 数组是类的数据成员时检索 2d 数组元素
- 打印/修改类对象的特定成员变量,其类定义列表 (STL) 包含的元素类型
- 如果类包含基类类型的成员作为第一个元素,后跟其他成员,编译器是否可以优化空基?
- C++初始化/填充静态成员 std::数组元素到特定值
- 从向量中擦除元素是否也会擦除元素中存在的所有成员向量
- 算法在容器中查找具有给定值的元素之一的成员
- 返回对私有向量成员元素的非常量引用是否是一种不好的做法
- std::array :通过智能指针访问元素的成员
- 如何在STD :: MAP中找到具有至少一个数据成员等于密钥的结构的元素
- 尝试从成员函数推送时不维护元素的成员向量
- 如何查找一组类型对是否包含一个元素作为第二个成员
- 为什么指向向量元素的成员会导致分割错误?
- 如何访问封装向量中的元素的公共成员
- 根据类成员对同一密钥的多映射元素进行排序
- 如何有效地将浮点数别名为数组的命名成员和元素
- 从 Vector 的元素成员方法插入矢量元素会破坏 *this
- 如何仅使用元素成员函数和STL在容器中积累来自元素成员函数的结果