基本语法请教

zwjchina 2011-11-18 04:16:44

struct SVertexColorSetAlphaManipulator
{
public:
SVertexColorSetAlphaManipulator(u32 alpha) : Alpha(alpha) {}
void operator()(video::S3DVertex& vertex) const
{
vertex.Color.setAlpha(Alpha);
}
private:
u32 Alpha;
};


这里的 运算符号() 什么时候会被调用
...全文
166 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
qscool1987 2011-11-18
  • 打赏
  • 举报
回复
函數對象而已,他和构造函数没什么冲突,它你就把它当函数
zzcmx2008 2011-11-18
  • 打赏
  • 举报
回复
c++ primer上面的一个简单的例子:
struct absInt
{
int operator()(int val)
{
return val<0?-val:val;
}
};

int i = -42;
absInt absobj;
unsigned int ui = absobj(i); //函数对象就是说这个对象可以表现的像函数一样被使用,但是多数用在标准算法里面。
zzcmx2008 2011-11-18
  • 打赏
  • 举报
回复
重载调用操作符,主要用在标准库、标准算法里面,用来作为函数对象的,
可以百度,函数对象
healer_kx 2011-11-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 pengzhixi 的回复:]

SVertexColorSetAlphaManipulator obj;
video::S3DVertex parm;

obj(parm);这个时候就会调用。
[/Quote]
+++
测试NULL 2011-11-18
  • 打赏
  • 举报
回复
你找本好的C++基础书看看吧

#include <iostream>
using namespace std;

typedef unsigned u32;

namespace video
{
class S3DVertex
{
};
}

struct SVertexColorSetAlphaManipulator
{
public:
SVertexColorSetAlphaManipulator(u32 alpha) : Alpha(alpha) {}
SVertexColorSetAlphaManipulator(video::S3DVertex& vertex) {}

void operator()(video::S3DVertex& vertex) const
{
cout << "calling operator()" << endl;
}
private:
u32 Alpha;
};

int main(void)
{
u32 alpha;

SVertexColorSetAlphaManipulator obj(alpha);
video::S3DVertex parm;

obj(parm);

return 0;
}
柯大侠爱喝水 2011-11-18
  • 打赏
  • 举报
回复
当你定义对象的时候初始化,就可以用到他了,structobj(obj);
如果定义时没初始化,后边去用对象初始化的时候,用到的是赋值构造 optreater =
柯本 2011-11-18
  • 打赏
  • 举报
回复
同样obj(parm);时,调用void operator()
一叶之舟 2011-11-18
  • 打赏
  • 举报
回复
obj(parm);//调用 operator()(video::S3DVertex& vertex)
SVertexColorSetAlphaManipulator obj2(parm);调用SVertexColorSetAlphaManipulator(video::S3DVertex& vertex)
pengzhixi 2011-11-18
  • 打赏
  • 举报
回复
没什么不好理解啊
SVertexColorSetAlphaManipulator obj(alpha);
video::S3DVertex parm;
obj(parm);//调用 operator()(video::S3DVertex& vertex)
SVertexColorSetAlphaManipulator obj2(parm);调用SVertexColorSetAlphaManipulator(video::S3DVertex& vertex)
zwjchina 2011-11-18
  • 打赏
  • 举报
回复
这东西真费解呀。要是


C/C++ code
struct SVertexColorSetAlphaManipulator
{
public:
SVertexColorSetAlphaManipulator(u32 alpha) : Alpha(alpha) {}
SVertexColorSetAlphaManipulator(video::S3DVertex& vertex) {}

void operator()(video::S3DVertex& vertex) const
{
vertex.Color.setAlpha(Alpha);
}
private:
u32 Alpha;
};




这怎么理解呢
pengzhixi 2011-11-18
  • 打赏
  • 举报
回复
额 修改下
u32 alpha=12;
SVertexColorSetAlphaManipulator obj(alpha);
video::S3DVertex parm;
obj(parm);
zwjchina 2011-11-18
  • 打赏
  • 举报
回复
那构造函数呢?
pengzhixi 2011-11-18
  • 打赏
  • 举报
回复
SVertexColorSetAlphaManipulator obj;
video::S3DVertex parm;

obj(parm);这个时候就会调用。

65,189

社区成员

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

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