繁体   English   中英

C ++模板化STL容器

[英]C++ Templated STL Container

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

多谢你们!

容器已经被模板化了,所以您想要做的可能是这样的:

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);

实际上,您可以执行以下操作:

#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文件中的消息。 您需要做的就是在其中包含创建的头文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM