我们如何在模板类中使用静态映射,模板类的每个实例化都应该使用相同的映射
How do we use static map in template class, with every instantiation of template class the same map should be used
我正在使用以下代码片段。 当我实例化 TemplateClass 两次(一次使用 int,下一次使用 double(时,我碰巧在 getKey 中看到相同的大小。而 map 是静态的,第二次大小应该是 2。
template<typename T>
class TemplateClass
{
private:
static std::map<int, T> *mKey;
public:
TemplateClass()
{
}
void insert(T value, int count)
{
(*TemplateClass<T>::mKey)[count]=value;
}
long getKey(){return mKey->size();}
};
template<typename T>
std::map<int,T> *TemplateClass<T>::mKey = new std::map<int,T>;
int main()
{
TemplateClass<int> obj1;
obj1.insert(10, 1);
std::cout<<"Object 1 key is: "<<obj1.getKey()<<std::endl;
TemplateClass<double> obj2;
obj2.insert(222.1122, 2);
std::cout<<"Object 1 key is: "<<obj2.getKey()<<std::endl;
return 0;
}
啊,很多事情,尝试使用静态映射的父类。 全球静态地图。
TemplateClass<int>::mKey
和TemplateClass<double>::mKey
是两个不同的对象。从某种意义上说,它们都是static
的,因为它们不与任一类型的任何实例相关联,但是类模板的两个实例化TemplateClass<int>
和TemplateClass<double>
TemplateClass
是不同的类类型,因此它们的所有成员也是不同的。
对于任何不同的T
和U
类型,类类型TemplateClass<T>
和TemplateClass<U>
是完全独立的类类型,由于是从同一类模板实例化的,它们恰好共享相似的结构。
您可以(在大多数情况下(很好地定义两个非模板化类TemplateClassInt
和TemplateClassDouble
,所有提及T
的类在第一个中被int
替换,在第二个中被double
替换。
相关文章:
- 从C++实例化QML
- 设计一个只能由特定类实例化的类(如果可能的话,通过make_unique)
- 内联映射初始化的动态atexit析构函数崩溃
- 如何创建一个空的全局类并在启动时实例化它
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 约束和显式模板实例化
- 为什么包含windows.h会产生语法错误,从而阻止类的实例化?(C2146,C2065)
- 对象实例化调用构造函数的次数太多
- 如何使用非默认构造函数实例化模板化类
- 静态数据成员模板专用化的实例化点在哪里
- 错误的cv::face FacemarkLBF实例化
- 我们如何在模板类中使用静态映射,模板类的每个实例化都应该使用相同的映射
- QML映射正确的标记实例化
- 模板标准::映射::迭代器实例化
- 如何通过映射实例化派生类中的对象
- 如何在定义映射/集合时实例化比较函数(函子)
- 实例化标准::映射的正确方法是什么<>
- STL映射实例化
- 涉及无序映射的实例化错误
- 使用for循环实例化映射