如何在地图中存储模板对象
How to store template object in 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中,所以我像这样声明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,但如果这就是您所需要的,它可能会更整洁。
如果可以以某种方式抽象对这些类型的访问,则可以使模板类从抽象基类继承,而不仅仅是在映射中保留指向基的指针。
它称为类型擦除,您可以在此处获取有关它的更多信息 键入擦除技术
相关文章:
- C++ 在堆栈中包含多态属性的类对象存储
- 将对象存储为其基本虚拟类
- 将大型对象存储在无序映射中是否效率低下
- C++:将未知类型的对象存储为成员变量的类
- 按unique_pointer将传递的对象存储在地图中
- 如何将 c++ 类对象存储为数组?
- 将对象存储在 std::map 中
- 是否存在对象存储在其生存期内可能会更改的情况?
- 将不同类型的对象存储在容器中
- 将自定义可绘制对象存储在数组中会导致绘制时出现分割错误
- 我将如何在C++中文件处理对象(存储/导入)
- 将对象存储在C 中的2维Sprite矩阵中
- 将抽象派生类对象存储在基类向量中
- 将任意函数对象存储到类成员容器中,而无需知道其声明签名
- 如何使用向量将类对象存储在超载操作员中
- 适当的方法将对象存储在Std矢量中
- 将向量对象存储在共享指针投掷错误中
- 将多态对象存储在unordered_set中
- 为什么我可以将对象存储在大小不同的数组中
- 返回对象存储在哪里