| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2456 人关注过本帖
标题:c++11中如下lambda操作如何在c++98使用bind2nd实现
只看楼主 加入收藏
S140131022
Rank: 2
来 自:重庆邮电大学
等 级:论坛游民
帖 子:205
专家分:35
注 册:2014-10-9
结帖率:90.24%
收藏
已结贴  问题点数:20 回复次数:7 
c++11中如下lambda操作如何在c++98使用bind2nd实现
功能很简单,主要是为了实现容器的每个元素中一个成员变量的赋值操作,但是这个元素是一个类成员函数,所以我就不会了!

其中:m_MessageBox[serviceID]是一个Vector,其元素定义为:
程序代码:
// 消息元素,用于保存Refresh线程中缓存的消息
class MessagBrick
{
public:
    HKEX_OMDD::Uint16            MsgType;        // Type of message.
    HKEX_OMDD::Uint16            MsgSeq;            // RealSeqNum of message
    char                        Content[1000];    // Message Content
    MessagBrick()
    {
        MsgType = 0;
        MsgSeq = 0;
        memset(Content, 0, sizeof(Content));
    }
};

typedef std::vector<MessagBrick> MessVector;


使用迭代器实现如下:
    //MessVector::iterator iter = m_MessageBox[serviceID].begin();
    //for (; iter != m_MessageBox[serviceID].end(); ++iter)
    //{
    //    iter->MsgSeq = seqID;
    //}

C++11使用lambda实现如下:
for_each(m_MessageBox[serviceID].begin(), m_MessageBox[serviceID].end(), [seqID](MessagBrick& element) {element.MsgSeq = seqID; });

请问使用C++98中的bind2nd怎么实现,以前学过,但是很久没用忘记了~

谢谢各位大神!
搜索更多相关主题的帖子: c++ 操作 元素 message Content 
2018-11-13 17:36
复旦
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:81
专家分:124
注 册:2018-10-29
收藏
得分:10 
for(所有的m_Messagebox里面的成员)

    bind2nd(元素.MessageBrick(), 5) )


bind2nd的功能是绑定函数的第二个元素值。
2018-11-13 18:24
S140131022
Rank: 2
来 自:重庆邮电大学
等 级:论坛游民
帖 子:205
专家分:35
注 册:2014-10-9
收藏
得分:0 
回复 4楼 复旦
这个5是什么意思哦? 可否详细一点呢

既然还有不甘心
就还没到放弃的时候~
2018-11-13 19:24
复旦
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:81
专家分:124
注 册:2018-10-29
收藏
得分:0 
5是我随便写的。 5的位置填写想要赋值的数字。
2018-11-13 19:48
S140131022
Rank: 2
来 自:重庆邮电大学
等 级:论坛游民
帖 子:205
专家分:35
注 册:2014-10-9
收藏
得分:0 
回复 6楼 复旦
能否直接写出答案,我之所以不会用是因为单个元素是一个class,而不是基本数据类型,如果是基本数据类型我还是会的。


既然还有不甘心
就还没到放弃的时候~
2018-11-13 19:51
复旦
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:81
专家分:124
注 册:2018-10-29
收藏
得分:0 
刚刚理解错了问题,以为是改变某个函数里面的元素。 不好意思。
但是,bind2nd是函数值绑定器。我不太理解你为什么要用这个来赋值变量。
C98里可以用迭代器赋值的呢。
2018-11-13 20:54
S140131022
Rank: 2
来 自:重庆邮电大学
等 级:论坛游民
帖 子:205
专家分:35
注 册:2014-10-9
收藏
得分:0 
回复 8楼 复旦
因为想实现区间赋值,感觉它比使用迭代器进行for循环效率要高一些!

既然还有不甘心
就还没到放弃的时候~
2018-11-14 08:10
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9031
专家分:54061
注 册:2011-1-18
收藏
得分:10 
使用 bind2nd 的话,你总得独立写个 函数 或 仿函数 吧,岂不是代码变得更臃肿?
for_each 并不比 for循环 效率更高
2018-11-14 08:42
快速回复:c++11中如下lambda操作如何在c++98使用bind2nd实现
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030688 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved