C ++模板化STL容器

时间:2016-05-26 18:22:49

标签: c++ templates stl polymorphism containers

我是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 *。我不想因为安全而这样做,我仍然必须明确定义如何处理每种类型,即使过程将完全相同。

谢谢,伙计们!

2 个答案:

答案 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文件中访问这些消息了。您需要做的就是将创建的头文件包含在其中。