簡體   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