高难度:template T operator()(C c);怎么调用?

yxandyx 2010-09-22 08:19:17
我在一个类A 里面重载了operator()运算符,而且是template的,编译成功,但是怎么调用?
注意,A不是模板类,运算符是模板函数

class A
{
template<typename R,typename T>
R operator ()(T t)
{
return Trigger(t);
}
}
...全文
233 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
pengzhixi 2010-09-22
  • 打赏
  • 举报
回复
直接传参就是了,函数参数是可以推导的。
airtrack 2010-09-22
  • 打赏
  • 举报
回复
当然如果你的返回类型R能够用T类型traits出来,还是可以用traits来做。
airtrack 2010-09-22
  • 打赏
  • 举报
回复
重载operator()就是为了调用方便,如果你要加个template,那你就得像2楼那样去调用,这样一来反而更加别扭,并没有给你的调用带来方便。解决方法要么把template移到class层面,要么就定义一个具名的template成员函数。如果这两个方法都不能满足的话,那你得考虑考虑是不是设计的问题了,不要在语法糖上面纠结了。
yshuise 2010-09-22
  • 打赏
  • 举报
回复
#include "stdafx.h"

class Trigger
{
public:
Trigger(){}
Trigger(double a):x(a){}
void set(double b){x = b; }
private:
double x;
};

class A
{
public:
template<typename R , typename T>
R& operator ()( R& r, T t)
{
r.set(4.7777);
return r;
}
};

int _tmain(int argc, _TCHAR* argv[])
{
Trigger t;
A a;
a(t,4.999);
return 0;
}
yxandyx 2010-09-22
  • 打赏
  • 举报
回复
yshuise,把类改成了模板类,这个区别大了,而且与设计不符了
hz_yck 2010-09-22
  • 打赏
  • 举报
回复
作为返回类型的模板参数一定要显式给出的吧
yshuise 2010-09-22
  • 打赏
  • 举报
回复
#include "stdafx.h"

class Trigger
{
public:
Trigger(double a):x(a){}
private:
double x;
};

template<typename R>
class A
{
public:
template<typename T>
R operator ()(T t)
{
return Trigger(t);
}
};

int _tmain(int argc, _TCHAR* argv[])
{
A<Trigger> a;
a(4.999);
return 0;
}
yxandyx 2010-09-22
  • 打赏
  • 举报
回复
就为了用着方便:
A a
a("fsafa");//多方便,函数对象
//不过返回类型无法确定
hz_yck 2010-09-22
  • 打赏
  • 举报
回复
确实。。
不过干嘛要用重载?
yxandyx 2010-09-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 hz_yck 的回复:]

A a;
R r = a.operator()<R, T>(t);
[/Quote]
这样子调用,还不如不要用运算符重载了
yxandyx 2010-09-22
  • 打赏
  • 举报
回复

class A
{
template<typename R,typename T>
R operator ()(T t)
{
return t;//直接返回
}
}

hz_yck 2010-09-22
  • 打赏
  • 举报
回复
A a;
R r = a.operator()<R, T>(t);
healer_kx 2010-09-22
  • 打赏
  • 举报
回复
Trigger是类型,还是函数啊? 如果是类型的话,那么和模板参数R是什么关系?

64,637

社区成员

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

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