【发布时间】:2016-07-26 22:11:49
【问题描述】:
我想知道模板成员函数是如何工作的。特别是当有模板成员函数的实例化时,是不是整个类都被重新定义了?我的困惑来自这样一个事实(如果我是对的)模板类不是正确意义上的类。即,当实例化时,编译器为一个全新的类创建定义。模板函数也是如此。但是,具有模板函数的类似乎是实际的类,所以我不确定它们如何工作。因此,我想知道,在实例化模板成员函数之后,类定义会发生什么?此外,如果我将带有模板成员函数的类传递给模板类,我可以使用模板成员函数吗?这会导致问题吗?我尝试了一次,但得到一个错误,说几个函数定义了不止一次,尽管我不确定这是否是原因,或者是否有其他原因导致我的错误。使用静态模板成员函数时还有什么需要注意的吗?
【问题讨论】:
-
模板的特化,无论是类模板还是函数模板,在第一次在翻译单元中使用时都会被实例化。类可以有成员模板(类和函数模板),类模板也可以。此外,类模板的成员函数本身就是隐含的函数模板。
-
请注意,模板永远不会被实例化。只能实例化模板的特化。
-
很好,谢谢。
-
“模板类不是正确意义上的类” 你的困惑来自于称它们为“模板类”。它们是类模板。它们不是类,而是用于制作类的模板。
-
我的编译器使用精灵魔法。
标签: c++ templates static member