将lambda传递到lambda回调参数
passing lambda to a lambda callback parameter
我正在使用C 14,并且有一个用例,必须有效地执行此操作:
template <typename F>
void foo (F&& fun)
{
auto l = []()->int
{
return 20;
};
fun(l);
}
int main ()
{
auto l = [] (auto& a)
{
std::cout << "Hello function: " << a() << std::endl;
// 'a' has to be copied to a queue optionally
};
foo(l);
}
,但是foo()
内部调用了100万个功能 - 使用回调'fun
'。我不能将所有代码放入标头文件中。保持foo()
定义和DOT CPP文件中调用函数的最简单方法可能是将foo()
更改为
void foo (std::function< void(std::function<int(void)>) > fun)
但这太效率了,我不希望任何内存分配。这里将有许多创建" fun
",然后在每个呼叫" fun(...)
"的情况下之一。现在,可以使用此处提到的功能_REF之类的内容来优化外部std ::函数。https://vittorioromeo.info/index/blog/passing_functions_to_functions.html#fn_view_impl
但是内部std ::功能,不能是因为必须"可选地"复制为队列。现在,我该如何在没有内存分配的情况下使这项工作 - 与使用模板一样接近性能。[一种方法是拥有带有固定内部存储的std ::功能之类的东西。]但是,我有一种方法来抛出更多模板以实现我想要的东西。或某种方式更改界面以具有更多相同效果的方法。
不确定这是否是您要寻找的,但也许可以帮助您。
#include <iostream>
#include <deque>
#include <memory>
struct lambdaHolderBase {
virtual int operator()() = 0;
};
template <typename T>
struct lambdaHolder : lambdaHolderBase {
lambdaHolder(T tf) : t(tf) {}
T& t;
int operator()() override { return t(); }
};
template <typename F>
void foo (F&& fun)
{
auto l = []()->int
{
return 20;
};
lambdaHolder<decltype(l)> l2(l);
fun(l2);
}
int main ()
{
auto l = [] (auto& a)
{
static std::deque<lambdaHolderBase*> queue;
std::cout << "Hello function: " << a() << std::endl;
queue.emplace_back( &a );
// 'a' has to be copied to a queue optionally
};
foo(l);
}
相关文章:
- FLTK:按下哪个按钮 - 将数字传递给按钮的回调 (lambda)
- 使用带有闭包的 lambda 的回调
- 通过实用程序 fn 将捕获的 lambda 传递给 C 样式回调 - 错误
- C++模板函数中,指定回调函子/lambda 的参数类型,同时仍允许内联?
- 如何成功地将函数对象(或lambda)传递给trackbar回调的第二个参数(void*)
- ROS:在nodehandle.subscribe中使用lambda作为回调
- 如何定义与将 Lambda 与捕获作为回调一起使用兼容的函数指针
- lambda回调中Android Cocos2D-X应用程序上的SEG故障
- 在库中的 C++17 中强制内联回调 (lambda)
- 如何使用C lambda将成员功能指针转换为普通功能指针,以用作回调
- std::函数,带有 SDL 事件回调的 lambda 错误
- 将lambda传递到lambda回调参数
- C lambda/回调弹出窗口
- C lambda回调为触发事件
- 允许 lambda/回调函数的多个签名作为模板参数
- 读取 Lambda 回调后的访问冲突
- 如何避免在调用异步函数进行 lambda 回调时出现额外的副本
- C++ VS 2013 中的 11 lambda 回调无法编译
- 不带Y Combinator的递归lambda回调
- 透明地配置std::function / lambda回调