我有模板类
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无效
但是,如果我不使用模板类,我可以成功定义地图。
有没有其他方法可以定义用于存储模板类对象的地图?请告诉我。
答案 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,但如果这就是你所需要的,那么它可能会更整洁。