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

时间:2012-09-24 06:07:36

标签: c++ map

我有模板类

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<int,server_fd* > MapPairList;

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

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

有没有其他方法可以定义用于存储模板类对象的地图?请告诉我。

2 个答案:

答案 0 :(得分:0)

如果您可以以某种方式抽象访问这些类型,您可以让您的模板类继承自抽象基类,而不仅仅是保持指向地图中基础的指针。

这称为类型擦除,您可以在此处获取有关它的更多信息Type erasure techniques

答案 1 :(得分:0)

尝试在模板类中添加基类:

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,但如果这就是你所需要的,那么它可能会更整洁。