具有容器变量类型的类模板
Class template with variable type of container
我想知道是否可以创建一个类模板,其中包含一个对象,该对象必须是容器,但具有用户指定的类型。
例如,现在我有这样的类:
template<class T>
class Myclass {
std::queue<T> queue;
// SOME OTHER MEMBERS
}
但是我希望能够在需要时使该std::queue
对象成为其他类型的容器,例如std:stack
,以便能够处理具有FIFO以外的其他类型的策略的容器。
可能吗?或者是否有任何其他解决方案不涉及我创建另一个完全像这样的类,而是使用stack
而不是queue
?
当然可以。 这称为容器适配器。 std::queue
本身是一个容器适配器,看起来像
template<class T, class Container = std::deque<T>>
class queue
{
//...
};
这样做需要你使用类似的东西
std::queue<int, std::vector<int>> foo;
如果要更改容器。 如果您不想指定容器的模板类型,则可以使用模板模板,例如
template<class T, template<typename...> class Container = std::queue>
class Myclass
{
Container<T> cont;
};
你可以像这样使用它
Myclass<int, std::set> foo;
将其更改为使用 std::set
而不是默认std::queue
。
相关文章:
- 从模板创建通用打印函数,以打印基元数据类型变量的值
- 指针数据类型变量如何包含对象?
- 将 static_cast<int>(-15) 分配给静态常量字符类型变量
- 将内置类型变量传递给只有一个类类型参数的"+"运算符函数时自动类型转换的构造函数
- 如何为结构类型变量赋值
- 如何将字符类型变量附加到字符串中?
- 共享或私有 openmp 代码中的结构化类型变量
- 有没有办法在 c++ 中制作类型变量?
- 从其他类声明类类型变量会给出 C2143 错误(在"*"之前缺少";")
- 如何检查类中定义的枚举类型变量是否被分配给?
- 将子类实例保存在父类型变量中并通过父变量使用 Child 函数?
- 是否可以在没有结构的情况下创建新的类型变量?
- 为什么类型变量;不调用默认 CTR
- 如何使用CIN将输入整数值获取到char类型变量中
- 如何为 char** 类型变量提供适当的值,以便将其分配给字符串变量
- 在C++标准中哪里说必须初始化 const 内置类型变量的定义
- 为什么可以将其他类型变量用作C 中常量参考参数参数的参数
- Eclipse CDT 打开声明的自动类型变量
- 如何计算长长类型变量中的位数
- 将自动类型变量初始化为零.这种类型安全吗?