【发布时间】:2016-05-26 18:22:48
【问题描述】:
我是 C++ 新手,我基本上是想弄清楚我是否可以使用 STL 容器作为模板来存储传递给它的任何类型。我不知道我是否需要使用类模板或定义一个独特的结构或什么。
这基本上是我所拥有的,以及对我想要实现的目标的一些评论:
std::deque<template class T> messages; <--- ???
//the goal being not to store ANY type in this deque, but to somehow
//template it for each type that needs to be stored
//e.g. a different deque for an int, bool, ADT, etc.
template<class T> bool StoreMessage(T const &messageToStore){
messages<T>.push_back(messageToStore);
}
我什至不知道如何解决这个问题,或者这是否可能,但我真的不想为需要存储的每种类型编写函数,因为有一个 很多。或使用 void*。出于安全考虑,我也不想这样做,我仍然必须明确定义如何处理每种类型,即使过程将完全相同。
谢谢各位!
【问题讨论】:
-
std::deque已经按照你想要的方式工作了,除非我完全误解了你。 -
标准 template 库(即no longer the proper name of it)已经为大多数(全部?)容器使用了模板。
-
@Galik 我知道双端队列已经可以存储任何类型,但我不认为双端队列本身是模板化的。目标是有一个双端队列成员变量,它被模板化以存储传递给方法的任何内容。使用 deque
作为成员变量会导致编译器错误,因为 T 不是我的类的类型。 -
所以你想让一个双端队列保存不同类型的实例?您打算如何将类型拉出来?未来你打算用
messages做什么? -
@Barry 不,抱歉,我不擅长解释。我想在标头中声明一个双端队列,但对传入的每种类型使用不同的双端队列,而不必明确定义我正在使用的类型。例如如果我需要存储整数和浮点数,我可以在不定义 deque
和 deque 的情况下单独存储它们,如果这有意义的话。我认为 Wojciech 将双端队列包装在模板容器中的答案是最好的解决方案。
标签: c++ templates stl polymorphism containers