标题:c++11中如下lambda操作如何在c++98使用bind2nd实现
取消只看楼主
S140131022
Rank: 2
来 自:重庆邮电大学
等 级:论坛游民
帖 子:205
专家分:35
注 册:2014-10-9
结帖率:90.24%
已结贴  问题点数:20 回复次数:3 
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
S140131022
Rank: 2
来 自:重庆邮电大学
等 级:论坛游民
帖 子:205
专家分:35
注 册:2014-10-9
得分:0 
回复 4楼 复旦
这个5是什么意思哦? 可否详细一点呢

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


既然还有不甘心
就还没到放弃的时候~
2018-11-13 19:51
S140131022
Rank: 2
来 自:重庆邮电大学
等 级:论坛游民
帖 子:205
专家分:35
注 册:2014-10-9
得分:0 
回复 8楼 复旦
因为想实现区间赋值,感觉它比使用迭代器进行for循环效率要高一些!

既然还有不甘心
就还没到放弃的时候~
2018-11-14 08:10



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-491225-1-1.html




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

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