为什么模板类的实现和声明应该位于同一个头文件中?

为什么模板类的实现和声明应该位于同一个头文件中?

为什么模板类的实现和声明应该位于同一个头文件中?你们谁能以身作则解释一下?



慕桂英4014372
浏览 1191回答 3
3回答

胡说叔叔

编译器需要访问整个模板定义(而不仅仅是签名),以便为模板的每个实例化生成代码,因此需要将函数的定义移动到标头。欲知更多详情,请阅读包含模型.

蝴蝶刀刀

他们没必要这么做。需要的是模板定义在实例化点(使用它的地方)可见,这样编译器就可以在此时从模板派生类/函数。但是,对于模板类使用两个头文件是非常常见的://&nbsp;foo_fwd.hpptemplate&nbsp;<typename&nbsp;T,&nbsp;typename&nbsp;U>&nbsp;struct&nbsp;Foo;//&nbsp;foo.hpp#include&nbsp;"foo_fwd.hpp"template&nbsp;<typename&nbsp;T,&nbsp;typename&nbsp;U>&nbsp;struct&nbsp;Foo&nbsp; {&nbsp;typedef&nbsp;std::pair<T,U>&nbsp;type;&nbsp;};这允许那些不需要完整模板定义的人包含一个稍微轻一些的标头,例如://is_foo.hpp#include&nbsp;<boost/mpl/bool.hpp>#include&nbsp;"foo_fwd.hpp"template&nbsp;<typename&nbsp;Z>struct&nbsp;is_foo:&nbsp;boost::mpl::false_&nbsp;{}; template&nbsp;<typename&nbsp;T,&nbsp;typename&nbsp;U>struct&nbsp;is_foo<&nbsp;Foo<T,U>&nbsp;>:&nbsp;boost::mpl::true_&nbsp;{};它可以加快编译时间。
打开App,查看更多内容
随时随地看视频慕课网APP