如何在地图中存储模板对象

How to store template object in map

本文关键字:对象 存储 地图      更新时间:2023-10-16

我有模板类

template<class T1 ,class T2, class T3>
class server_fd
{
  T1 servport;
  T2 server_ip;
  T3 servobj;
  int local_port;
public:
  server_fd(const T1& servport, const T2& server_ip,const T3 servobj) {
    this->servport=servport;
    this->server_ip=server_ip;
    this->servobj=servobj;   
    cout <<"check n"<<this->server_ip;
  }
};    

现在我想将这个类的对象存储在map中,所以我像这样声明map。

 map<int,server_fd* > MapPairList;

在此之后,当我编译我的代码时,它会给出此错误 错误:模板参数 2 无效 错误:模板参数 4 无效

但是,如果我不使用模板类,我能够成功定义地图。

有没有其他方法可以定义用于存储模板类对象的映射?请让我知道。

尝试向模板类添加基类:

class server_fd_entry {};
template<class T1 ,class T2, class T3>
class server_fd
{
    <snip>
}
...
map<int,server_fd_entry* > MapPairList;

这样,无论模板参数如何,地图都可以存储所有server_fd类型。 但是,我可以看到这会导致很多向下转换,因此另一种方法是确保在声明映射时指定所有模板参数:

map<int,server_fd<int,int,int>* >

这样,您只能存储一种特定类型的server_fd,但如果这就是您所需要的,它可能会更整洁。

如果可以以某种方式抽象对这些类型的访问,则可以使模板类从抽象基类继承,而不仅仅是在映射中保留指向基的指针。

称为类型擦除,您可以在此处获取有关它的更多信息 键入擦除技术