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来检索正确的类型。。。或使用

相关文章:
  • 没有找到相关文章