我正在使用以下代码段。
当我实例化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++ - 我们如何在模板类中使用静态映射,在模板类的每个实例化中都应使用相同的映射,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57724362/