C++ 为什么模板化的类数据成员需要static关键字?

C++ 为什么模板化的类数据成员需要static关键字?,c++,class,c++11,templates,static,C++,Class,C++11,Templates,Static,这没有编译的理由是什么 class Math{ template<typename T> std::map<int, T> m; // error: member 'm' declared as a template }; 此答案由发布(根据CC by-SA 4.0许可证),作为对问题的回答 正是由于上述诊断原因。类的非静态数据成员不能是模板,因为这意味着类的每个实例都有无限(可能无限)个名为m的成员,这些成员都需要同时存储在类的实例中。这使得包含类的

这没有编译的理由是什么

class Math{
   template<typename T>
   std::map<int, T> m;   // error: member 'm' declared as a template
};
此答案由发布(根据CC by-SA 4.0许可证),作为对问题的回答



正是由于上述诊断原因。类的非静态数据成员不能是模板,因为这意味着类的每个实例都有无限(可能无限)个名为
m
的成员,这些成员都需要同时存储在类的实例中。这使得包含类的大小不确定。静态成员可以是模板,因为每个实例化都可以明确地引用,并且不需要同时存储在单个对象中。这不是一个需要
静态
的情况-一个是可以实现的,另一个不是


正是由于上述诊断原因。类的非静态数据成员不能是模板,因为这意味着类的每个实例都有无限(可能无限)个名为
m
的成员,这些成员都需要同时存储在类的实例中。这使得包含类的大小不确定。静态成员可以是模板,因为每个实例化都可以明确地引用,并且不需要同时存储在单个对象中。这不是一个需要
静态
的情况——一个是可以实现的,一个是可以实现的not@Peter这看起来就像是一个答案。谢谢@Peter,我想这就解决了问题。您可能希望将您的评论作为答案。@Peter我已添加了您的评论作为答案。谢谢@cigen。
class Math{
   template<typename T>
   static std::map<int, T> m;
};