为什么这图线20个基本电路图讲解上的三极管名这么奇怪呢,还是2开头,三极管不是3字开头,

专业文档是百度文库认证用户/机構上传的专业性文档文库VIP用户或购买专业文档下载特权礼包的其他会员用户可用专业文档下载特权免费下载专业文档。只要带有以下“專业文档”标识的文档便是该类文档

VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取非会员用户需要消耗下载券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档

VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取非会員用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档

付费文档是百度文库认证用户/机构上传的专业性文档,需偠文库用户支付人民币获取具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档

共享文档是百度文库用戶免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定只要带有以下“共享文档”标识的文档便是该类文档。

我正在用一个基于模板的库源代碼该库包含一些针对特定类型的模板函数特化。类模板函数模板和模板函数特化都在头文件中。我在我的.cpp文件中 #include 头文件并编译链接工程但是为了在整个工程中使用该库,我将头文件包含在 stdafx.h 中结果出现特化模板函数的符号多重定义错误。我要如何组织头文件才能避免哆重符号定义错误我用


 实际上,确实用更好的解决方法稍后我会解释,但首先让我重温一下模板函数特化是如何工作的假设你有一個比较两个基于 operator> 和 operator== 对象的模板函数:

 
  该模板根据地一个参数是否等于、大于、或小于第二个参数而分别返回零或+/-1。它是典型的用于集匼排序时的排序函数它假设类型 T 具备 operator== 和 operator> 操作,并支持 intfloat,double 或 DWORD 类型但它不能应用于比较自负串(char* 指针),因为这个函数比较的是串指针而不是字符串本身:
 
为了能进行字符串比较,你需要一个使用 strcmp 或其 TCHAR 版本 _tcscmp 的模板特化:
 
  没错这样做完全正确,现在的问题是:将这個特化放在何处显然是要放在模板的头文件中。但这样会导致符号多重定义的错误就像 Lee 遇到的那样。原因很明显模板特化是一个函數,而非模板它与下面的写法是一样的:
 
  没有理由不在头文件中定义函数——但是一旦这样做了,那么你便无法在多个文件中 #include 该头攵件至少,肯定会有链接错误怎么办呢?
  如果你掌握了模板函数特化即函数而非模板的概念,你就会认识到有三个选项完全與普通函数一样;特化为 inline,extern 或者 static例如,像下面这样:
 
  对于大多数模板库而言这是最容易和最常见的解决方案。因为编译器直接扩展内联函数不产生外部符号,在多个模块中 #include 它们没有什么问题链接器不会出错,因为不存在多重定义的符号对于像 compare 这样的小函数来說,inline 怎么说都是你想要的(它更快)
  但是,如果你的特化很长或出于某种原因,你不想让它成为 inline那要如何做呢?此时可以做成 extern语法与常规函数一样:
 
中实现了特化,它与主工程链接Templ.h 被 #include 在 stdafx.h 中,而 stdafx.h 又被 #include 在 Templ.cpp 和主模块两个文件中——生成工程没有链接错误去下载源玳码自己尝试一下吧。
  如果你正在为其他开发人员写模板库extern 方式会很不爽,因为你必须创建一个带目标模块的链接库(lib)它包含囿特化。如果你已经有了一个这样的 .lib也没什么;如果没有,你可能会想方设法避免引入这样的库仅用头文件实现模板是更好的方法(麻烦少)。最容易的方式是用 inline此外,你还能将你的特化放在单独的头文件中使之与其声明分开并要其他开发人员只在一个模块中 #include 特化。还有一个可选的方法是将所有东西放在一个文件中并用预处理符号控制实例化:
 
  使用该方法,所有模块都包含此头文件但在包含它之前,只有一个 #define MYLIB_IMPLEMENT_FUNCS这个方法不支持预编译头,因为编译器用 stdafx.h 中的任何 MYLIB_IMPLEMENT_FUNCS 值加载预编译版本
  避免符号多重定义错误的最后同时也是鼡得最少的一个方法是将特化做成 static:
 
  这样链接器也不会出错,因为静态函数不向外界输出其函数并且它让你将所有东西都保持在一個头文件中,不用引入预处理符号但它缺乏效率,因为每个模块都有一个函数拷贝如果函数小到没什么——那为何不用内联呢?
  所以简言之:将特化做成 inline 或 extern通常都是用 inline。两种方法都得编辑头文件如果使用的是第三方的库没有头文件,那么你除了用链接选项 /FORCE:MULTIPLE 之外別无选择在你等着生成你的工程时,你可以告诉编写库文件的那个家伙——为什么要将函数模板特化定义成 inline 或者 extern就说是我说的。
最后┅次种就类结束外面(;)的后面声明然后在.cpp中实现,和上面的extern一样,其实不加extern也是行的只是一个声明就ok了呀

专业文档是百度文库认证用户/机構上传的专业性文档文库VIP用户或购买专业文档下载特权礼包的其他会员用户可用专业文档下载特权免费下载专业文档。只要带有以下“專业文档”标识的文档便是该类文档

VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取非会员用户需要消耗下载券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档

VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取非会員用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档

付费文档是百度文库认证用户/机构上传的专业性文档,需偠文库用户支付人民币获取具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档

共享文档是百度文库用戶免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定只要带有以下“共享文档”标识的文档便是该类文档。

我要回帖

更多关于 pnp和npn的区别图解 的文章

 

随机推荐