C++ template 问题

C++Template头文件和定义分开编译的问题 <br />(1)<br />// Foo.h<br /> template<typename T><br /> class Foo<br /> {<br /> public:<br /> void f();<br /> };<br /><br /> // Foo.cpp<br /> #include <iostream><br /> #include "Foo.h"<br /><br /> template<typename T><br /> void Foo<T>::f()<br 阅读详情

今天在

http://bbs.51cto.com/viewthread.php?tid=854253&pid=4320845&page=1&extra=#pid4320845

看到了一个关于C++template的问题,于是就仔细的研究过了一下。

#include <iostream>
using namespace std;
template<class T>
class A
{
public:
	A(){m_value = 1;}
	friend T operator+(const A& left, const T& right);
	int m_value;
};
template<class T>
T operator+(const T& left, const T& right)
{
	T result;
	result.m_value = left.m_value + right.m_value;
	return result;
}
int main(int argc, char* argv[])
{
	A<int> a;
	A<int> b;
	A<int> c  = a + b;
	cout << c.m_value << endl;
	system("pause");
	return 0;
}

上面的代码在vs2008里面没有错误

========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========

我把同样的代码放到linux里面测试一下:



编译结果有错:


但是已经有可执行文件生成了,而且执行结果正确:





刚好这段时间在研究C++的template,看了半天也没看出端倪来。


前面的第一段代码,在类体中声明的时候使用的是

friend T operator+(const A& left, const T& right);

而在定义的时候使用

T operator+(const T& left, const T& right)

并且此处只能这么声明和定义,不然就错误了

如如此声明:

	friend T operator+(const T& left, const T& right);
错误如下:

Compiling...
1>main.cpp
1>d:\documents\visual studio 2008\projects\demo_template\demo_template\main.cpp(8) : error C2803: 'operator +' must have at least one formal parameter of class type
1>        d:\documents\visual studio 2008\projects\demo_template\demo_template\main.cpp(20) : see reference to class template instantiation 'A<T>' being compiled
1>        with
1>        [
1>            T=int
1>        ]
1>Build log was saved at "file://d:\documents\Visual Studio 2008\Projects\demo_template\demo_template\Debug\BuildLog.htm"
1>demo_template - 1 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

按照原先的定义形式的话,在main函数中使用了类型检查将A转换为T。可是为什么在声明的时候就一定要用到一个类A的参数呢?

按照我现在的理论知识来说,这个是没有错误的,但是恰恰在声明的时候一定要使用类A的一个参数才可以,为什么呢?

transformer中QKV的通俗理解(剩女与备胎的故事) 用vit的时候读了一下transformer的思想,前几天面试结束之后发现对QKV又有点忘记了, 写一篇文章来记录一下 参考链接: 哔哩哔哩:在线激情讲解transformer&Attention注意力机制(上)在线激情讲解transformer&Attention注意力机制(上)_哔哩哔哩_bilibiliAttention is all you need介绍 更具体的介绍可以去阅读论文在Attention is all you need这篇文章中提出了著名的Transformer模型Transforme 阅读详情

相关推荐

Yolov26 在 Rk3588 上的 Rknn Onnx 部署实践(c++)

本文介绍了YOLOv26在RK3588平台的C++推理部署方案。重点包括:1)扩展Ultralytics导出格式,新增RKNN_ONNX专用导出选项;2)重构Detect Head结构,使其更适合RKNN推理;3)提供C++侧后处理实现建议。该方案保留了Ultralytics训练生态,通过优化模型结构输出,将解码等操作移至C++端,充分发挥Rockchip NPU性能。适用于RK3588/RK356x等平台,需配合rknn-toolkit2使用,为YOLOv26的嵌入式部署提供完整解决方案。

qq_64366203的博客 2177

C++ 模板 泛型编程

C++ 模板

weixin_41111116的博客 605

毫米波与太赫兹:十射线模型建模

Pt=1,只考虑地面和前后两面墙的反射,反射系数为0.7。用matlab设计程序并实现该功能。,总计考虑10条路径,求出接收功率随。

SupermarketX的博客 785

pta c++ 程序填空题

pta c++ 判断题 类与对象 数据共享与保护 数组 指针 字符串 继承与派生 多态性 群体类和群体数据的组织 泛型程序设计 流类库与输入输出 异常处理 stl 面向对象程序设计 成员函数 构造函数 析构函数 类的组合 作用域 静态 动态 友元 常对象 多文件结构 对象数组 this指针 动态内存分配 引用 虚函数 抽象类 运算符重载 函数模板 类模板 容器

weixin_62566689的博客 5054

rockchip rk3566 android11 网口log报错: DMA engine initialization failed

问题描述:上电初始化前将网口插入,然后上电初始化网口能够正常使用,且能够找到PHY,ifconfig 查看能够有eth0 产生,网口正常使用且能够热插拔,但上电初始化时,不插入网口,就会报DMA engine initialization failed 错误,DMA 初始化的时候出错了。 分析:一般产生这个问题可以认为是GMAC 的工作时钟出问题了。先测量时钟引脚是否有时钟,时钟频率以及幅度等指标是否正常,主要确认以下几个方面: 1.IOMUX 出错,检查时钟脚寄存器值是否正确。 2.时钟方向以及配置

qq_48709036的博客 2万+

TC275-AutoSAR实战:Davinci Cfg多核OS配置与调试技巧

本文详细介绍了在TC275芯片上使用Davinci Cfg工具进行AutoSAR多核操作系统配置的实战步骤与调试技巧。内容涵盖从导入arxml文件的常见“坑”开始,到配置Det、EcuC、创建多核OS实例、关联OS应用、创建任务与设置优先级调度,最后分享了利用Det日志、调试器多核视图及处理核间通信与缓存一致性等关键调试方法,旨在帮助开发者高效完成复杂车载ECU软件集成。

weixin_29219189的博客 489

C++ 语言学习 day07 函数异常,模板,模板类

函数异常,模板,模板类,template typename

she666666的博客 552

java调用第三方api接口获取数据

弊端,但是并不是每个接口都适用于这套模板,之前写的接口不适用,都是在这个模板里做了定制处理(if 特殊表 -》处理),需要考虑兼容之前的代码,这种兼容代码,有风险会改掉之前的逻辑个人喜欢,有一个接口,写一段代码灵活自由些。2.还有一部分是对post请求的返回数据,做处理,因为json返回的格式如果双方没有约定好,里面数据是多层json嵌套,需要做处理。江同事交接的就是这个代码模板,可以看下源码调试一下,之前交接的视频,也可以看下,主要还是看代码理解快些,将 写好的代码达成jar包,上传到linux上去,

随风不随水的博客 2036

C++异常

异常是指存在于运行时的反常行为,这些行为超出了函数正常功能的范围。 所以在程序的某部分检测到一个它无法处理的问题时,需要用到异常处理。 首先我们先贴代码#include "stdafx.h" #include <iostream> using namespace std;template <class T> class Vector { public: Vector(int);

一首小夜曲 746

iTunes登录协议全解析:从抓包到签名验证(含HTTPDebugger避坑指南)

本文深入解析了iTunes登录协议的核心流程,包括sign-sap-setup-cert和sign-sap-setup-buffer等关键请求,并提供了使用HTTPDebugger等工具进行抓包分析时绕过反调试检测的实战技巧与避坑指南。文章详细拆解了PLIST编解码、请求签名验证机制及密码加密逻辑,为网络安全研究和协议逆向提供了完整的技术路径。

weixin_29224309的博客 331

OpenClaw实战系列·进阶特辑02:多智能体协同——打造企业级AI中台

**企业级AI中台面临多Agent协同的挑战,本文提出基于多智能体协同的解决方案。通过分析单Agent的局限性(上下文溢出、专业度稀释等)和多Agent的核心优势(任务专注度、故障隔离等),提出三种协作架构模式(指挥型、联邦型、点对点型),并强调人格化设计的重要性。文章详细介绍Agent间通讯机制(同步/异步会话、文件系统协作)和"身脑分离"的解耦架构设计,提供可落地的企业级AI中台实施方案。

PeterPan的博客 494

【C++】类模板继承问题

文章目录一、情况一二、情况二 一、情况一 #include<iostream> using namespace std; template<class _Ty> class Base { private: _Ty val; public: Base(_Ty x = _Ty()): val(x) { } public: static int num; }; template<class _Ty> int Base<_Ty>::num = 0; cl

xiaoxiaoguailou的博客 243

淘宝母婴用品数据挖掘及可视化分析研究

1. 背景介绍 在当今的电子商务时代,母婴用品市场已经成为了各大电商平台的一片蓝海。淘宝作为中国最大的电子商务平台,其上的母婴用品交易数据自然引人关注。理解这些数据,可以帮助商家更好地制定营销策略,也可以帮助消费者更好地选择产品。因此,本文将对淘宝母婴用品的数据进行深入的挖掘和分析。 1.1 电子商务的

AI天才研究院 1258

C++中template的.h文件和.cpp文件的问题

在C++中,用到类模板时,如果类似一般的类声明定义一样,把类声明放在.h文件中,而具体的函数定义放在.cpp文件中的话,会发现编译器会报错。如类似下面代码: //test.h文件 #ifndef TEST_H_ #define TEST_H_ template <class T> class test { private: T a; public: ...

weixin_30480651的博客 467

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

C++ template 语法需要注意的问题!

最近使用C++ template不是很多. 却需要在多个编译器上进行编译. 开发的时候我的开发环境为Visual Studio 2005. 编译当然是vc++2005了.编译我的几个模板没有出现过问题.后来,程序需要在g++多个版本下编译. g++3.x的没有问题.但是到了g++-4.0下却出现多个恶心的编译错误.现在一一列出,希望给后来者提供些线索.1. template class frien...

javahigh1 348

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

C++中template的使用以及常见问题

原文:https://www.cnblogs.com/jiading/p/9838024.html 模板的声明有两种:template &lt;typename Type&gt;或者template&lt;class Type&gt;。虽然建议使用typename以避免二义性,但是这两种实际上是都可以的。 模板只作用于其下方的一个类或者函数,所以在类外实现成员函数时要对每一个函数都在之前进行模...

reason的博客 3844

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

C++模板问题template

template T det(const array &in);用法为det(DATA1); 参考文章如下:转载于http://www.cnblogs.com/gw811/archive/2012/10/25/2738929.html 模板是C++支持参数化多态的工具,使用模板可以使用户为类或者函数声明一种一般模式,使得类中的某些数据成员或者成员函数的参数、返回值取得任意类型。

ZIV555的博客 671

[讨论]关于c++的template的一个问题

最近做项目的时候,钻进了一个牛角尖,百思不得其解,希望有高手指定一二 BUG背景:假设有很多很多结构相似的结构体,它们的唯一区别就是枚举的名称和枚举的命名方式不相同,现在我想设计一个统一的算法读取,这些结构体(PS:无论结构体的名称是什么,都能用同一个函数读取出来) 下面给出示例代码 #include "stdafx.h" #include &lt;string&gt; using nam...

PangCoder的博客 357

c++template[模板函数]的[显式具体化]以及[模板函数重载]问题

重写bigger 为普通函数,可行,性能也ok模板函数显式特化,可行,直接用的特化性能会有下降。接用的特化,可行,切性能也ok问题:使用和,最好别同时出现。模板函数显式特化需要和其对应的模板函数匹配。模板函数有些场景下可能并不好用,需要有选择的使用。

Neon Light 的博客 393

记录c++ template的奇怪语法问题

1.模板函数不能是虚函数 这个还可以理解,参考c++模板函数可以是虚函数吗 如果模板函数是虚函数,会严重降低编译器处理效率,可以知道C++连类的声明顺序都是严格要求的,这样的语法更不能允许了。 2.模板函数和偏特化 (1)经过测试:普通模板函数支持偏特化; (2)非内联类的模板函数支持偏特化; (3)内联类的模板函数不支持偏特化 #include <iostream> using namespace std; class father { public: templa

weixin_44333998的博客 1265

C++类模板 template <class T> 遇到的问题

新学内容,概念还不太清晰。 报错如下:(求解答) 错误 C2039 "getdnext": 不是 "list<char>" 的成员 错误(活动) E0135 class "list<char>" 没有成员 "getdnext" 代码如下: //建立一个简单的单向链表类模板,并通过建立一个保护字符的连接表list,并调试该类模板 #include<iostream> using namespace std;...

ML_GearYe的博客 1620

Raylib C++ Starter Template for VSCODE 常见问题解决方案

该项目是一个为Visual Studio Code编辑器准备的Raylib C++的起始模板,适用于Windows操作系统。主要编程语言为C++。 ## 新手常见问题及解决方案 ### 问题一:如何配置Visual Studio Code以运行项目? **问题描述:** 新手在使用该项目时,可能不知道如何配置Visual Studio Code以运行C++程序。 **解决步骤:** 1.

gitblog_01133的博客 985

C++:关于template与friend联合出现的问题

1(C++ primer 5th edition 7.2.1: Declarations for Friends) A friend declaraton only specifies access. It is not a general declaration of the function.// If we want users of the class to be able to ca

tong_xin2010的专栏 1170

C++ Template: 模板参数传递中的切片问题

Effective Standard C++ Library: Explicit Function Template Argument Specification and STL A New Language Feature and Its Impact on Old Programming Techniques       Klaus Kreft and Angelika Langerhtt

dengyunze 3801

C++模板template实战:3种分离编译问题分析与.h/.hpp解决方案对比

本文深入探讨C++模板template在分离编译中的3种典型问题,分析.h与.hpp解决方案的优缺点对比。针对模板实例化可见性问题,提供头文件包含、.hpp混合和显式实例化三种实用方案,并给出工程实践建议,帮助开发者有效解决C++模板分离编译难题。

weixin_31423955的博客 288
上一篇: 马云的经典话语
下一篇: 一次开发,多处部署:首个开源多设备开发框架Joshfire
Qicz
博客等级 码龄16年 56粉丝 122原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值