小编bin*_*377的帖子

可以将Lambda表达式降级为C++ 98

我最近遇到了一个问题,需要将用lambda表达式编写的C++ 11代码集成到只支持C++ 98编译器的旧代码库中.我想出了几个可能等效的lambda,如Macro,functor或函数指针.但是在用捕获法翻译lambda时,它们似乎都是有限的.例如,带回调的简单通用函数:

template <class Fn>  
void ForEachObject(Fn fn)  
{  
    for (uint i = 0; i < objectCount; i++)  
    {  
        fn(i, address + i * objectSize);  
    }  
}
Run Code Online (Sandbox Code Playgroud)

而典型的来电者会做类似的事情:

uint attributes = 0x0030;
....
ForEachObject([=](uint index, void * objectAddress)
{
    if ((ObjectInfo(index) & attributes) != 0)
    {
        fn(index, objectAddress);
    }
});
Run Code Online (Sandbox Code Playgroud)

这里的注意属性来自lambda的范围.无论如何仍然重用没有lambda的每个逻辑?或者我必须在每个这样的调用者上重写逻辑?

c++ lambda c++11 c++98

2
推荐指数
1
解决办法
1503
查看次数

标签 统计

c++ ×1

c++11 ×1

c++98 ×1

lambda ×1