liveloo 发表于 2015-7-1 09:43:56

一个模板声明的解析

#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

这段程序什么意思?出自istream头文件

zhangbin_hunan 发表于 2015-7-1 10:28:24

#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来指明这时一个全局变量。这里指明的是一个全局类。

liveloo 发表于 2015-7-1 21:11:23

template class 表示全局模板类的意思?后面 _CRTIMP basic_istream<char,char_trait<char>>是类名?

liveloo 发表于 2015-7-1 21:37:26

#define _CRTIMP __declspec(dllimport),CRTIMAP是调用规范,basic_istream<char,char_trait<char>>为什么是这样的格式?

liveloo 发表于 2015-7-1 21:43:42

本帖最后由 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]
查看完整版本: 一个模板声明的解析