为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C++
慕桂英4014372 2019-06-17 16:24:24
为什么模板类的实现和声明应该位于同一个头文件中?为什么模板类的实现和声明应该位于同一个头文件中?你们谁能以身作则解释一下?
查看完整描述

3 回答

?
胡说叔叔

TA贡献1804条经验 获得超8个赞

编译器需要访问整个模板定义(而不仅仅是签名),以便为模板的每个实例化生成代码,因此需要将函数的定义移动到标头。

欲知更多详情,请阅读包含模型.


查看完整回答
反对 回复 2019-06-17
?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

他们没必要这么做。

需要的是模板定义在实例化点(使用它的地方)可见,这样编译器就可以在此时从模板派生类/函数。

但是,对于模板类使用两个头文件是非常常见的:

// foo_fwd.hpptemplate <typename T, typename U> struct Foo;// foo.hpp#include "foo_fwd.hpp"template <typename T, typename U> struct Foo 
{ typedef std::pair<T,U> type; };

这允许那些不需要完整模板定义的人包含一个稍微轻一些的标头,例如:

//is_foo.hpp#include <boost/mpl/bool.hpp>#include "foo_fwd.hpp"template <typename Z>struct is_foo: boost::mpl::false_ {};
template <typename T, typename U>struct is_foo< Foo<T,U> >: boost::mpl::true_ {};

它可以加快编译时间。


查看完整回答
反对 回复 2019-06-17
  • 3 回答
  • 0 关注
  • 1190 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信