函数模板 对 引用的 推演 (高手进)

dodo4444 2008-12-07 11:10:03
#include "stdafx.h"
#include <iostream>
using namespace std;

struct zz
{
double a;
double b;
double c;
};

template<typename T>
class param
{
public:
param()
{
cout<<"数据类型"<<endl;
}
};

template<typename T>
class param<T&>
{
public:
param()
{
cout<<"引用类型"<<endl;
}
};

template<typename T>
class param<T*>
{
public:
param()
{
cout<<"指针类型"<<endl;
}
};

template<typename T>
void call(T t)
{
param<T> zz;
}

int _tmain(int argc, _TCHAR* argv[])
{
zz a;
zz *b= &a;
zz &c=a;

call(a);
call(b);
call(c); ///// 这里解析出来的是数据类型 (1)
call<zz&>(c); ///// 这里解析出来的是引用类型 (2)
///// 有什么方法让 (1)解析出引用类型。
}

如上代码, 望高手能给予解答, !!
...全文
128 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lw1a2 2008-12-07
  • 打赏
  • 举报
回复
帮顶
dodo4444 2008-12-07
  • 打赏
  • 举报
回复
谢谢!!
Jinhao 2008-12-07
  • 打赏
  • 举报
回复
>>///// 有什么方法让 (1)解析出引用类型。

没有,只有用(2)方法.在推导参数类型时,如果是引用类型,则推导为原型
ProgrammerNO1 2008-12-07
  • 打赏
  • 举报
回复
可以弄出来,可是MS协议限制 ,编译器是他们弄的, 解析引用总会报错。
qqwx_1986 2008-12-07
  • 打赏
  • 举报
回复
dev运行出来情况和楼主一样....

不知道什么情况...

mark
yndfcd 2008-12-07
  • 打赏
  • 举报
回复
这是VS的一个BUG.我曾经在MSDN上发过这个BUG的描述,但是MS坚持认为他们的编译器没问题.

他们说这只是个很小的问题,可以很容易修正,并没有说会不会修复.


只有显示调用才可以.
像这样
call<zz&>(c);

根据C++的标准,在用引用来调用函数模板参数时,function( T )应该推导出引用版本的实例化函数.而MS的编译器总是推导出一个非引用版本的实例化函数.
dodo4444 2008-12-07
  • 打赏
  • 举报
回复
顶起来, 期待高手回答

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧