std::function静态替代方案对非无状态lambda的支持问题咨询
无std库依赖的std::function静态分配替代方案相关疑问
问题背景
我正在研究不依赖标准库的std::function静态分配替代方案,发现部分实现仅支持无状态lambda。比如vl库能正常处理带[&]捕获的lambda,但etl库不行,调用时会产生垃圾值。
测试代码
template<typename Func, typename... Args> class Callback { public: Func dFunc; etl::delegate<void(Func v, int& ret)> dLambda; vl::Func<void(Func func, int& ret)> dLambda1; Callback(Func func, Args&... args) : dFunc(func), dLambda([&args...](Func v, int& ret) { ret = v(args...); }), dLambda1([&args...](Func v, int& ret) { ret = v(args...); }) {} void run(int& ret) { dLambda(dFunc, ret); // auto test = dLambda; // CHECK_EQUAL(true, is_stateless<decltype(test)>::value); } void run1(int& ret) { dLambda1(dFunc, ret); // auto test1 = dLambda1; // CHECK_EQUAL(true, is_stateless<decltype(test1)>::value); } };
额外疑问
- 我通过无状态测试工具对两个委托对象进行
is_stateless检测,结果显示它们都不是无状态的,这是为什么? - 测试代码本身似乎“修复”了原本无法正常工作的替代方案,这又是为什么?
核心问题
想知道支持[&]捕获的方案添加了什么特性?实现这类替代方案时应该关注哪些要点?
内容的提问来源于stack exchange,提问作者schanti schul
相关产品推荐
相关产品推荐

