一个模板声明的解析
#ifdef _DLLextern template class _CRTIMP basic_istream<char,char_trait<char>>;
extern template class _CRTIMP basic_istream<wchar_t,char_traits<wchar_t>>;
#endif //_DLL
这段程序什么意思?出自istream头文件 #ifdef _DLL
extern template class _CRTIMP basic_istream<char,char_trait<char>>;
extern template class _CRTIMP basic_istream<wchar_t,char_traits<wchar_t>>;
#endif //_DLL
这时宏定义语句,这几条语句的意思是#ifdef 是一个条件判断 ,判断变量_DLL是否为真,如果为真,则将申明下面两个类,这两个类是全局模板类,定义在其他文件中,c++中用extern来指明这时一个全局变量。这里指明的是一个全局类。 template class 表示全局模板类的意思?后面 _CRTIMP basic_istream<char,char_trait<char>>是类名? #define _CRTIMP __declspec(dllimport),CRTIMAP是调用规范,basic_istream<char,char_trait<char>>为什么是这样的格式? 本帖最后由 liveloo 于 2015-7-1 21:46 编辑
basic_istream<char,char_trait<char>>为什么是这样的格式?是不是 template <class T,class E>已经分别用char(T),char_trait<char>(E)实例化了?
换句话说,在动态链接库中,类模板的是:template<class T,class E>
class basic_stream
{
.....
};
如果外部声明就得用basic_stream<char,char_trait<char>这样的形式?
页:
[1]