如何使用lambda表达式更改代码?

时间:2015-07-27 04:20:05

标签: c++ c++11 lambda

我正在使用lambda表达式研究c ++。 我只是尝试更改已经使用for或while编码的代码,然后我有关于lambda的问题。

我只是使用lambda或for_each(c ++ 11)更改代码。如何改变?

这是一个想要改变的代码。

std::string PointToString(void* p_pData)
{
    char* p = (char*)p_pData;

    int iLength = 0;
    std::memcpy(&iLength, p, sizeof(int));
    p += sizeof(int);

    std::string sRet;
    std::array<char, 3> szB;
    sRet.append("0x");

    for ( int i = 0; i < iLength; i++ )
    {
        sprintf(szB.data(), "%02X", (unsigned char)*(p++));
        sRet.append(szB.data());
    }

    return sRet;
}

此代码只是将内存值转换为十六进制代码。 这个函数就像这样调用。

char szB[15] = {0x0b, 0x00, 0x00, 0x00, 0xc7, 0xd1, 0xb1, 0xdb, 0xc0, 0xd4, 0xb4, 0xcf, 0xb4, 0xd9, 0x2e};

void* p = nullptr;

p = (void*)szB;

sRet = PointToString(p);

结果可能是0x0B000000C7D1 .....

我想在PointToString函数中尝试lambda。我该如何更改该功能?

1 个答案:

答案 0 :(得分:4)

好吧,你可以写:

std::for_each(p, p + iLength, [&](unsigned char ch)
{
    sprintf(szB.data(), "%02X", ch);
    sRet.append(szB.data());
});

&表示您将通过引用对szBsRet进行操作,而不是对其副本进行操作。

恕我直言,但这并不是对原始代码的重大改进。