C++;模板化STL容器 我是C++初学者,我主要想弄清楚我是否可以使用STL容器作为模板来存储任何类型的内容。我不知道我是否需要使用一个类模板或者定义一个唯一的结构或者什么
以下是我的基本情况,以及我想要实现的一些评论:C++;模板化STL容器 我是C++初学者,我主要想弄清楚我是否可以使用STL容器作为模板来存储任何类型的内容。我不知道我是否需要使用一个类模板或者定义一个唯一的结构或者什么,c++,templates,stl,polymorphism,containers,C++,Templates,Stl,Polymorphism,Containers,以下是我的基本情况,以及我想要实现的一些评论: 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,
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);
}
std::deque消息 容器已经被模板化,因此您尝试执行的操作可能如下所示:
template <typename T>
bool store_message(const T &message, std::deque<T> &container) {
container.push_back(message);
}
模板
bool store_消息(常量T和消息,std::deque和容器){
容器。推回(消息);
}
要调用它,请通过引用传递容器和元素:
std::deque<int> numbers;
int el = 5;
store_message(el, numbers);
std::deque编号;
int el=5;
存储信息(el、数字);
容器已被模板化,因此您尝试执行的操作可能如下所示:
template <typename T>
bool store_message(const T &message, std::deque<T> &container) {
container.push_back(message);
}
模板
bool store_消息(常量T和消息,std::deque和容器){
容器。推回(消息);
}
要调用它,请通过引用传递容器和元素:
std::deque<int> numbers;
int el = 5;
store_message(el, numbers);
std::deque编号;
int el=5;
存储信息(el、数字);
实际上,您可以执行以下操作:
#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);
}
#包括
模板
结构容器{
静态std::deque消息;
};
模板
std::deque容器::消息;
模板bool StoreMessage(T const&messageToStore){
容器::messages.push_back(messageToStore);
}
int main(){
INTA=10;
电子讯息(a);
}
所以,您希望将变量包装在额外的模板结构上,并将其放入静态变量中。但是,您需要声明静态变量,以便编译器为该变量分配内存。这是在以下行中完成的:template std::deque container::messages代码>。要正确地执行此操作,请记住将模板化的所有内容移动到头文件中,包括内存分配/声明内容。。。这样,您就可以访问所有cpp/cc文件中的消息。您只需将创建的头文件包含在其中。实际上,您可以执行以下操作:
#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);
}
#包括
模板
结构容器{
静态std::deque消息;
};
模板
std::deque容器::消息;
模板bool StoreMessage(T const&messageToStore){
容器::messages.push_back(messageToStore);
}
int main(){
INTA=10;
电子讯息(a);
}
所以,您希望将变量包装在额外的模板结构上,并将其放入静态变量中。但是,您需要声明静态变量,以便编译器为该变量分配内存。这是在以下行中完成的:template std::deque container::messages代码>。要正确地执行此操作,请记住将模板化的所有内容移动到头文件中,包括内存分配/声明内容。。。这样,您就可以访问所有cpp/cc文件中的消息。您所需要做的就是将创建的头文件包含在其中。除非我完全误解了您的意思,否则std::deque
已经按照您希望的方式工作了。标准模板库(即)已经为大多数(所有?)容器使用了模板。@Galik我知道deque已经可以存储任何类型,但我不认为deque本身就是模板。目标是拥有一个deque成员变量,该变量被模板化以存储传递到方法中的任何内容。使用deque作为成员变量会导致编译器错误,因为T不是我的类的一种类型。所以您希望一个deque保存不同类型的实例吗?你打算怎样把这些类型的东西拿出来?你将来打算如何处理消息
?@Barry不,对不起,我不擅长解释。我想在一个标题中声明一个deque,但对传入的每个类型使用不同的deque,而不必显式定义我使用的类型。e、 如果我需要存储int和float,我可以单独存储它们,而不需要定义deque和deque,如果这有意义的话。我认为Wojciech在模板容器中包装deque的答案是最好的解决方案。std::deque
已经按照您希望的方式工作了,除非我完全误解了您。标准模板库(即)已经为大多数(所有?)使用了模板Galik我知道deque已经可以存储任何类型的容器,但我不认为deque本身是模板化的。目标是拥有一个deque成员变量,该变量被模板化以存储传递到方法中的任何内容。使用deque作为成员变量会导致编译器错误,因为T不是我的类的一种类型。所以您希望一个deque保存不同类型的实例吗?你打算怎样把这些类型的东西拿出来?你将来打算如何处理消息
?@Barry不,对不起,我不擅长解释。我想在一个标题中声明一个deque,但对传入的每个类型使用不同的deque,而不必显式定义我使用的类型。e、 如果我需要存储int和float,我可以单独存储它们,而不需要定义deque和deque,如果这有意义的话。我认为Wojciech在将deque封装在模板容器中的答案是最好的解决方案。那么,我是否必须在使用每种数据类型时为其创建一个deque?deque是一个非模板类的成员变量,正如我现在看到的。是的,类型的容器需要在某个地方定义。您可能会找到一种不手动执行的方法。我在.h文件中将它定义为deque,但这不起作用,因为t不是基类的成员。我想我只是想看看我是否可以为deque本身做模板,而不是在deque中存储任何类型的数据。@dlar检查Wojciech Frohmberg的答案,它解决了为每种类型定义deque的问题,非常聪明。那么我是否必须在使用时为每种数据类型创建deque?deque是一个非模板类的成员变量,正如我现在看到的。是的,类型的容器需要在某个地方定义。您可能会找到一种不手动执行的方法