问题标签 [boost-function]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - boost::function 和 std::tr1::function 之间是否有重要的区别?
我在我的代码中使用了很多 boost,但到目前为止还没有使用std::tr1
. 现在我需要一个更复杂的函数指针,就像这两个可以提供的那样。不幸的是,C+11 还不是一个选项。我读到boost::function
某些编译器可能会很棘手,例如(7.1 之前的 Visual Studio 需要一种特殊的可移植语法),但没有找到std::tr1::function
有关此主题的任何信息。两者在内存使用、速度和兼容性方面有什么重要区别吗?
编辑:我目前使用的是 gcc 4.7,但代码也应该在 Visual Studio 上编译,最好也可以在 2005 等版本中编译
boost - 是否可以从它的 typedef 中找到 boost::function 的返回类型?
是否可以纯粹从 typedef 中找到 boost::function 的返回类型?
例子:
如何找到上述函数类型的返回类型?
我不确定在我的目标构建系统中是否可以使用 c++0x 功能,但欢迎任何解决方案。
非常感谢伙计们,
萨克
boost - 如何在 c++ 模板中使用 boost::is_same 以及 boost::lambda::bind
我正在尝试将泛型连接boost::function<void(void)>
到许多不同签名的 boost::signals2 。我可以使用 boot::lambda::bind 通过将返回值作为绑定参数的一部分传递来执行绑定部分,但是当返回类型为 void 时会出现问题
例子:
我不断收到编译错误
从错误中可以看出,带有 boost::is_void 的 if 条件(boost::is_same 也不是)似乎不起作用,有人知道为什么吗?有没有更好的方法来做这个绑定?
谢谢,萨克
boost - 这个 boost::lambda::bind 用法有什么问题?
这段代码有问题吗?我不断收到编译错误。基本上我想将一个 void 返回函数连接到一个具有非 void 返回类型的信号。增强版:1.46.1 版
编译时出现以下错误:
谢谢。
c++ - 多个回调处理程序
考虑一下片段:
注释掉的构造函数允许我添加对 Handler2 和 Handler3 的支持,但是有没有办法确定传递给 Worker 类的构造函数的处理程序?目前成员函数 Metadata、Image 和 Dlink 使用 'callBack' 对象。如果用户处理程序传入另一个处理程序,我需要区分 - 比如说 Handler2
我需要使用枚举来实现,实际上是我自己的类型系统(按照歧视性联合 - 也就是变体),这一事实也是一个明确的迹象,表明设计需要重新思考这种情况下,我愿意重新设计。必须在类中定义 N-1 个虚拟处理程序(即,在任何时候都只使用一个处理程序,而其他处理程序什么都不做)会让人感到困惑和低内聚的对象模型,但谁知道呢。
c++ - Boost函数赋值抛出异常
当我尝试将一个函数 1 分配给另一个函数 1 时,Boost::function 十次中有一次抛出异常。
Task 是boost::function1<void, void*>
.
下面是具体代码:
我专门在 boost function_template.hpp 中将其跟踪到赋值运算符,在这段代码中,它最终抛出:
为什么是这样?我的代码有什么容易发现的问题吗?还有什么需要的吗?
谢谢
编辑:我知道我会被要求使用 boost::threads,但我正在尝试我自己的 win32/pthread 包装器,(为了好玩)
c++ - Boost绑定和boost函数,将带参数的函数存储在向量中,然后执行它们
对不起,措辞不好的标题。
我一直在查看文档,但我找不到任何可以解决我遇到的这个问题的东西。
基本上我想function1<void, void*>
在一个向量中存储几个,并提供参数,然后在稍后阶段执行它们。
这就是我想要完成的:
现在执行 task() 它希望我传递一个参数,但我在 AddSomeTasks 中传递了它?为什么不使用它?或者我误解了 boost::bind 的用法?
谢谢
c++ - Boost函数组成
假设我想要一个函数double adapter(double)
,有没有一种通用的方法可以用 a 组合它boost::function<double(...)> functor
来产生另一个boost::function<double(...)> functor2
where functor2(...) == adapter(functor(...))
?特别是,如果有一种方法可以在不使用 C++11 的情况下做到这一点,那就太酷了。
编辑澄清一下,我很想知道是否有办法编写可以处理 any 的东西boost::function<double(...)>
,即具有不同长度签名的东西,而不必为 1、2、3 等参数多次复制和粘贴。
c++ - 如何在 C++ 中安全地破坏 Posix 线程池
我正在尝试使用 pthread 在 C++ 中实现线程池。我想将与线程管理相关的逻辑封装在一个拥有这些线程所有权的对象中。这意味着每当该对象被销毁时,必须停止并清理线程。
停止和销毁线程的最佳方法是什么?开始时分离和停止时取消是一个好的解决方案吗?还是取消和加入线程更好?请参阅我的代码,我将不胜感激任何相关评论。
WorkerThreadManager.h:
WorkerThreadManager.cpp:
主.cpp:
请注意这里描述的这段代码有问题。
c++ - 与线程池中的 boost::function 使用相关的崩溃
我正在尝试使用 pthread 在 C++ 中实现线程池。我想将与线程管理相关的逻辑封装在一个拥有这些线程所有权的对象中。这意味着每当该对象被销毁时,必须停止并清理线程。
我一直在测试我的代码,结果发现当我在调用 boost::function 时销毁 WorkerThreadManager 对象时出现分段错误。请参阅 GDB 的代码和回溯。我真的不明白为什么会发生这种情况,据我所知 boost::function 是可复制的,所以一旦我从队列中获取它的副本,我就可以 pop() 它甚至销毁整个队列(我在一些小测试),然后调用函数的副本。
WorkerThreadManager.h:
WorkerThreadManager.cpp:
主.cpp:
广发银行:
我真的很感激任何帮助。