1

我有模板类

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 无效

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

有没有其他方法来定义用于存储模板类对象的映射?请告诉我。

4

2 回答 2

0

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

它被称为类型擦除,您可以在此处获取更多信息类型擦除技术

于 2012-09-24T09:27:23.770 回答
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,但如果这就是您所需要的,它可能会更整洁。

于 2012-09-24T22:33:39.113 回答