c++中模板类的容器
container of template class in c++
本文关键字:c++ 更新时间:2023-10-16
我有一个模板,可以与不同的stl映射(map<int, int>
、map<int, char>
等)一起使用,如下所示。
template <typename Map> struct TriMaps
{
Map& next;
Map& prev;
Map& curr;
};
因此,TriMaps<init, int> intTriMaps;
TriMaps<int, char> charTriMaps;
那么,有可能拥有不同类型的上述TriMaps的容器吗?例如
vector <TriMaps> vecMaps;
其中包含intTriMaps和charTriMaps?通常容器需要相同的类型。但我真的需要一个箱子。没有可用的提升或第三个库。
首先确定并最终确定这个类模板TriMaps
应该做什么。在C++中,必须初始化对某个对象的引用。您可能需要一个非引用类型(或指针类型)。考虑:
template <typename Map>
struct TriMaps
{
Map next;
Map prev;
Map curr;
};
用法:
TriMaps<int> IntMaps;
vector<TriMaps<int>> iv;
如果你需要两个模板类型的参数,你可以这样做:
template <typename MapType1, typename MapType2>
struct TriMaps
{
MapType1 a;
Maptype2 b;
};
用法:
TriMaps<int, float> IntMaps;
vector<TriMaps<int, float>> iv;
编辑:
仔细理解下面的简单类不会编译。
class TriMap
{
int & ref_int;
};
一种方法是引用全局变量(只是为了使其编译),或者通过构造函数获取int&
。
// Approach 1
int global;
class TriMap
{
int & ref_int;
public:
TriMap() : ref_int(global) {}
};
// Approach 2
class TriMap
{
int & ref_int;
public:
TriMap(int & outer) : ref_int(outer) {}
};
不能有不同类型的std::vector
但是如果你能有基本的
struct TriMapBase { virtual ~TriMapBase() = default; };
template <typename Map> struct TriMaps : TriMapBase { /* Your implementation */ };
那么你可能有:
TriMapBase<std::map<int, int>> mapint;
TriMapBase<std::map<int, char>> mapchar;
std::vector<TriMapBase*> v = {&mapint, &mapchar};
但你必须使用虚拟函数或CCD_ 8来检索正确的类型。。。或使用
相关文章:
- 没有找到相关文章