我是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 *。我不想因为安全而这样做,我仍然必须明确定义如何处理每种类型,即使过程将完全相同。
谢谢,伙计们!
答案 0 :(得分:3)
容器已经模板化了,所以你要做的就是这样:
template <typename T>
bool store_message(const T &message, std::deque<T> &container) {
container.push_back(message);
}
要调用它,请通过引用和元素传递容器:
std::deque<int> numbers;
int el = 5;
store_message(el, numbers);
答案 1 :(得分:0)
实际上你可以这样做:
#include <deque>
template <class T>
struct container {
static std::deque<T> messages;
};
template <class T>
std::deque<T> container<T>::messages;
template<class T> bool StoreMessage(T const &messageToStore){
container<T>::messages.push_back(messageToStore);
}
int main() {
int a = 10;
StoreMessage(a);
}
因此,您希望将变量包装在其他模板化结构上并将其放入静态变量中。但是,您需要声明静态变量以便编译器为此变量分配内存。这是按行template <class T> std::deque<T> container<T>::messages;
完成的。要做到这一点,请记住将模板化的所有内容移动到包含内存分配/声明内容的头文件中......这样您就可以在所有cpp / cc文件中访问这些消息了。您需要做的就是将创建的头文件包含在其中。