VC6不支持模板函数在cpp文件中的实现

在VC9.0中实现C++模板类头文件和实现文件分离的方法 <br /> <br />如何实现C++模板类头文件和实现文件分离,这个问题和编译器有关。<br />引用<<C++primer(第四版)>>里的观点:1)标准C++为编译模板代码定义了两种模型:“包含”模型和“分别编译”模型。2)所有编译器都支持“包含”模型,某些编译器支持“分别编译”模型。<br />问题的提出:(帖子在:http://topic.youkuaiyun.com/u/20101215/15/f4f270f2-f0f9-4c5f-8765-1bfde2aeebbf.html)<br />第一种方法:按C 阅读详情

例如:
//myHeader.h
#include <iostream.h>
template <class T>
class A
{
      public:
      A();
      T &max(const T &,const T &) const;
};
template <class T> T &A<T>::max(const T &a,const T &b)
{
    return a<b?b:a;
}

//main.cpp
#include <iostream.h>
#include “myHeader.h“

main()
{
    A<int>  *cls=new A<int>();
     int  a=100;
     int  b=200;
     cout<<cls->max(a,b)<<endl;
     return 0;
}
按照上面的格式就可以执行。如果把class A的函数max的实现从头文件中拿出来放在一个cpp文件中
,则会产生错误,代码如下:
//myHeader.h
#include <iostream.h>
template <class T>
class A
{
      public:
      A();
      T &max(const T &,const T &) const;
};
//classA.cpp
#include “myHeader.h“
template <class T> T &A<T>::max(const T &a,const T &b)
{
    return a<b?b:a;
}

//main.cpp
#include <iostream.h>
#include “myHeader.h“

main()
{
    A<int>  *cls=new A<int>();
     int  a=100;
     int  b=200;
     cout<<cls->max(a,b)<<endl;
     return 0;
}
这时候就会出错,原因就是VC6不支持模板函数在cpp文件中的实现。解决的办法是把其实现放在头文件中,
不一定放在定义类的头文件中,可以放在独立的头文件中。
注意:其实根据实质,也可以把模板函数的实现放在cpp文件中,但是要把cpp文件包含在调用该模板函数的
文件中。
代码如下:
//myHeader.h
#include <iostream.h>

template <class T>class A
{
public:
 A();
 const T& max(const T&,const T&);
 
};
//classA.cpp
#include <iostream.h>
#include "myHeader.h"
template <class T>const T &A<T>::max(const T &a,const T &b)
{
 return a<b?b:a;
}
template <class T>A<T>::A()
{
 cout<<"constructor!"<<sizeof(T)<<endl;
}
//main.cpp
#include "myHeader.h"
#include "classA.cpp"
#include <iostream.h>
main()
{
 A<int> *cls=new A<int>();
 int a=100;
 int b=100;
 A<double> *d=new A<double>();
 double d1=100.2;
 double d2=200.2;
 cout<<cls->max(a,b)<<endl;
 cout<<d->max(d1,d2)<<endl;
 return 0;
}

【PBAP】规范精讲[3]: 蓝牙PBAP协议应用层核心——电话本数据的格式与交互逻辑解析 PBAP协议应用层是蓝牙电话本数据交互的核心,定义了电话本存储、对象类型、数据格式与虚拟目录结构。通过vCard标准格式及四大扩展属性(如X-IRMC-CALL-DATETIME、X-BT-UID),实现跨设备数据统一解析;采用多仓库与七类对象分类,支持本地与SIM卡双存储;虚拟文件夹结构结合句柄与vCard-listing索引,兼顾批量下载与精准访问;其标准化与实用性并重的设计,保障了车载、穿戴等场景下电话本数据的高效、稳定交互。 阅读详情

相关推荐

【HID】规范精讲[4]: 蓝牙HID传输机制——无线数据的传递规则与底层逻辑

蓝牙HID传输机制深度解析 蓝牙HID协议通过双信道架构实现高效数据传输。控制信道采用同步请求-响应模式,确保配置指令和状态查询的可靠性;中断信道采用异步无确认模式,实现鼠标移动、键盘按键等实时操作的极低延迟传输。两种信道分工明确:控制信道处理特征报告等可靠性要求高的数据,中断信道处理输入/输出报告等实时性要求高的数据。协议严格规定了报告长度校验、MTU约束和传输优先级等规则,既保证了不同类型数据的传输质量,又确保了设备间的兼容性。这种机制让无线外设获得了接近有线的使用体验。

byte轻骑兵的技术小窝 3万+

【菜鸟日记】无比悲催!VC6神奇的“template”-_- !

话说问题见我去年的一个帖子,http://topic.youkuaiyun.com/u/20101108/16/330084c3-7bbc-49e9-821a-51b1ca20fd9b.html。同样的问题又出现了,故技重施,可是一点用没有!才知道当时以为解决了,其实没有,许是碰对了。重新审视问题的根源,发现.rc和ResourceView没有建立关联,工程目录下没有.aps文件,在网上翻了两天,不甘心重装,打开别人的程序就正常啊,感觉这也不是重装系统或者VC能搞定的,找到一点蛛丝马迹,http://hi.baidu.

永远的行者 1049

LE Audio ASE状态机深度解析[2]:Codec Configured 流程分析

本文深入解析了Android蓝牙LEAudio模块中AseStateMachineProcessCodecConfigured核心函数的实现逻辑,该函数负责处理ASE(音频流端点)的CodecConfigured状态转换。文章详细阐述了参数解析、QoS校验、组状态管理、CIG创建等关键环节,揭示了LEAudio流配置的核心机制。

byte轻骑兵的技术小窝 2万+

【TextIn大模型加速器 + 火山引擎】在Coze平台快速搭建智能文档解析与合规审查Agent

本文介绍如何结合TextIn文档解析引擎与火山引擎Coze/HiAgent平台构建智能文档处理系统。重点演示了"跨国采购合同审查Agent"的实现过程,包括文档解析、条款分割、模板比对和大模型分析的工作流配置。该系统支持50+语言、20+格式文档处理,通过低代码方式实现从解析到智能理解的自动化流程,显著提升处理效率(耗时从3小时降至3分钟)和准确率(漏审率降低78%)。该方案为企业文档智能处理提供了高效的一体化解决方案,可扩展应用于产品手册翻译、贸易单据核验等多种场景。

byte轻骑兵的技术小窝 2万+

VC6不支持在cpp文件中实现的模板函数

首先,我们创建一个名为"template_example.h"的头文件,其中包含我们要使用的模板函数的声明和定义。接下来,我们在需要使用模板函数的cpp文件中包含头文件"template_example.h",并调用该函数。请注意,由于VC6的限制,我们需要将模板函数的声明和定义都放在头文件中,并确保所有需要使用模板函数的cpp文件都包含了该头文件。需要注意的是,虽然VC6在这一方面存在一些限制,但后续版本的Visual Studio编译器已经解决了这个问题,并且支持在cpp文件中实现模板函数。

ByteBuster的博客 146

C++如何使用C++ STL标准模板库中的算法函数(附源码)

本文讲述如何使用C++ STL标准模板库中的算法函数。

dvlinker的技术专栏 1万+

VC6.0不支持标准库函数max和min

今天写程序时在VC6.0中用到了函数max()和min()来求最大值和最小值,结果发现VC6.0不支持这两个函数,这应该是vc的问题吧,连标准库函数都不支持,不过这也正常,毕竟VC6.0不支持C++标准。本人自己写了这两个函数,C++标准库是这样实现的,所以可以当作库函数使用。max()和min()函数的实现如下: template<class...

weixin_33920401的博客 897

基于VC6.0的简易Web服务器实现

OSI七层模型是网络通信参考模型,它将网络通信分为七层,每一层负责不同的功能。理解这七层模型对于深入学习网络编程至关重要。从物理层开始,向上是数据链路层、网络层、传输层、会话层、表示层,最后是应用层。物理层处理的是原始比特流的传输,数据链路层则负责建立、维护和释放数据链路连接,网络层主要处理数据包的路由和寻址,而传输层则提供端到端的通信服务。会话层管理数据交换的会话,表示层处理数据的表示、安全、压缩等问题,最后应用层负责向应用进程提供网络服务。

weixin_36300623的博客 1109

用 C++ 实现 C# 中的 委托/事件 (1-delegateEMU.cpp)

前两天看程序员杂志看到关于 C# 中的委托/事件觉得用起来好像是挺方便的本人热衷于 C++想想用 C++ 来模拟似乎也可以于是就有了下面的代码...(VC6 不支持偏特化 本人工作环境就是 VC6 痛啊~~~)没有返回值的函数用 delegate否则就用 delegate_rtfunctor 也一样 functorN/functorN_rtdelegate 的模板参数可以是函数指针(非成员函数

coolcch的专栏 909

全球最大光伏电池缺陷异常检测数据集PVELAD【发布】

下载地址 1:GitHub - binyisu/PVEL-AD 下载地址 2:http://aihebut.com/col.jsp?id=118 下载地址 3:NAVEDownload 竞赛测试系统:Photovoltaic cell anomaly detection | Kaggle 一、简介 PVEL-AD 数据集又叫做EL2021数据集是用于对光伏电池异常缺陷检测方法进行基准测试的数据集,重点是光伏电池工业检测。PVEL-AD包含 36,543 张具有各种内部缺陷和异构背...

苏打水的杯子的博客 2万+

华为防火墙双ISP出口实战:如何用策略路由实现电信联通流量自动切换(附配置截图)

本文详细解析了华为防火墙在双ISP环境下的智能选路技术,通过策略路由与健康检测的深度应用,实现电信联通流量的自动切换。文章包含实战配置截图,帮助企业解决切换延迟、路径劣化等核心挑战,提升业务连续性。

backprop5master的博客 646

VC6下不支持函数模板显式实例化的解决方案

先下看面一段代码,这段代码可以在VC8,GCC下编译通过,但无法在VC6下编译通过:   #include using namespace std; class MyClass { public:      template      void ShowType(void)      {          cout      }; }; int ma

embededvc的专栏 1844

基于STM32的多模态智能风扇控制系统设计与实现

本文详细介绍了基于STM32单片机的多模态智能风扇控制系统的设计与实现。系统集成了红外遥控、蓝牙手机控制及人体感应等多模态交互方式,通过PWM技术实现无级调速,并设计了安全优先的控制逻辑。文章从硬件选型、核心原理、软件编程到系统调试,提供了完整的实战指南,适合嵌入式开发爱好者学习与实践。

weixin_28285943的博客 238

[function & type_traits] VC6 的 function traits 和 function 模板的新的实现方法

以前写的《用 C++ 实现 C# 中的 委托/事件》在VC6中无法完美实现 现在终于可以了(还有一点点小缺憾)委托部分就不提了首先说function traits在最新的boost 1.35中VC6的function traits只支持参数个数如: typedef int func(int); assert(boost::function_traits::arity == 1);不能得到参数和

cchhope的专栏 841

nRF52840开发环境搭建:从零开始配置Keil与SDK

本文详细介绍了nRF52840开发环境搭建的全过程,包括硬件准备、Keil MDK与nRF5 SDK的安装配置、常见问题解决方案及蓝牙功能开发进阶。特别强调了J-Link调试器的使用和SDK版本匹配的重要性,帮助开发者快速上手nRF52840开发。

weixin_29176179的博客 886

从零到一:桌面宠物的硬件架构设计与工程实践

本文详细介绍了基于STM32F103C8T6主控平台的桌面宠物机器人硬件架构设计与工程实践。内容涵盖电源管理、舵机控制、PCB布局及系统调试等核心环节,为硬件爱好者提供从零到一的完整开发指南,助力打造稳定可靠的智能桌面伴侣。

alice7model的博客 1113

C++模板的定制五:对定制成员函数的补充

C++模板的定制五:对定制成员函数的补充作者:袁小凯华南理工大学计算机研究所北区研发二部Email – ccplusplus@21cn.com 前言在” C++模板的定制四:定制成员函数和缺省类参 “一文中我简单介绍了模板类中成员函数的定制(全特化),但是有一细节还是说清楚的好,以免大家误解。在C++中不能局部定制模板类中的成员函数。再说一下模板类中的模板成员函数的用法。希

winmain的专栏 1032

Ubuntu 24.04 新增用户并禁用 root 账户操作指南

Ubuntu 24.04 新增用户并禁用 root 账户操作指南

深山技术宅的博客 1859

C++函数模板学习

   1. 模板定义          C++是一种强类型语言,它要求对于每一个实现都要有一个实例。如对于简单的min()的int和double两种实例都要事先定义,这给程序员带来很多不便性。这一章我们来学习函数模板,看它是如何解决这个问题的。函数模板提供一种用来自动生成各种类型函数实例的算法,程序员只需要补始化其中部分参数和返回值,或者都不初始化,只需要申明通用的类型,而函数体则不需要改变。

smallcraft的专栏 2708

麻辣香锅病毒分析

Spicy Hot Pot浏览器劫持病毒(麻辣香锅病毒)从2020年初被安全公司监测到,因其病毒模块带有MLXG_KM被安全行业代称麻辣香锅病毒。目前通过各种激活工具传播, 包括暴风激活、小马激活和KMS激活等诸多工具,疑似与下载站进行合作推广此类激活工具。Spicy Hot Pot 是一个浏览器劫持 Rootkit,它会将用户的主页更改为指向恶意软件操作员控制的页面,此外还会将内存转储从机器上传到预定义的服务器,并结合本地更新功能以确保其保持更新。通常浏览器劫持者会通过更改用户主页的恶意可执行文件或注册表

不忘初心,护天下安全! 4792

大模型的实践应用31-基于通义千问大模型改进台风和海浪预测研究,利用机器学习与通义千问结合的思路实现对台风和海浪预测分析

通义千问大模型是阿里巴巴云推出的一款大规模语言模型,旨在通过强大的自然语言处理能力提供更广泛的服务。从最初的构想到如今的广泛应用,通义千问的发展见证了人工智能领域尤其是自然语言处理技术的巨大进步。自发布以来,通义千问不断迭代升级,不仅在规模上实现了飞跃式的增长,在性能方面也得到了显著提升。本次研究尝试将通义千问强大的自然语言处理能力与经典的时间序列预测算法相结合,旨在提高对未来天气状况预测的精度。具体来说,首先使用通义千问生成高质量的文字描述来增强特征表达力;

微学AI的博客 936

在C++中利用模板实现 data variant(propery)

       在C++Builder, 可以通过CB的扩展语法__property()来实现对象的Property。但这个方法必需有编译器的支持,脱离了CB的编译环境就无法使用。同样的,在VC6.0以上的版本中,也实现了__declspec(property)这样一个语法来实现property.它除了跟CB 中的perperty一样,在跨平台方面有局限性以外,而且他不支持多态。 下面的例子可以说明

coder && thinker -- 老李博客 1211

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

上一篇: 头文件的使用
下一篇: 弄清C++在幕后为你所写、所调用的函数
_CPU
博客等级 码龄22年 0粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值