我花了一些时间研究了boost::
库的架构,对以下事实感到兴趣:
在某些库的部分中,非常常见地使用了yyy_fwd.hpp
的想法(例如请参考boost/detail
或boost/flyweight
)。
很显然,这些文件仅包含某些基于模板的类的前向声明,据我所知,可以从编译时间上获益。
有人能指出它们何时有帮助,并且在设计自己的模板时是否应该使用相同的想法?
谢谢。
我花了一些时间研究了boost::
库的架构,对以下事实感到兴趣:
在某些库的部分中,非常常见地使用了yyy_fwd.hpp
的想法(例如请参考boost/detail
或boost/flyweight
)。
很显然,这些文件仅包含某些基于模板的类的前向声明,据我所知,可以从编译时间上获益。
有人能指出它们何时有帮助,并且在设计自己的模板时是否应该使用相同的想法?
谢谢。
我不知道boost,但是这些前向声明也存在于标准库中。例如,<iosfwd>
包含流的前向声明(它们是模板,通常隐藏在typedef后面)。
当声明重载的operator<<时,您将受益于此头文件。
在您的头文件中:
#include <iosfwd>
class X { ... };
std::ostream& operator<< (std::ostream& os, const X& x);
ostream
(= basic_ostream<char,char_traits<char>>
)。namespace std {
template <class CharT>
class char_traits;
template <class CharT, class CharTraits>
class basic_ostream;
typedef basic_ostream<char, char_traits<char> > ostream;
}