问题标签 [stdbind]
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++ - 使用函子的自动类型推断不起作用
可能重复:
std::bind 绑定函数
上面的示例无法编译并给出多个错误,例如:Error 1 error C2780: '_Ret std::tr1::_Callable_fun<_Ty,_Indirect>::_ApplyX(_Arg0 &&,_Arg1 &&,_Arg2 &&,_Arg3 &&,_Arg4 &&,_Arg5 &&,_Arg6 &&,_Arg7 &&,_Arg8 &&,_Arg9 &&) const' : expects 10 arguments - 2 provided
.
使用带有显式类型的注释行确实可以编译。似乎推断的类型auto
不正确。在这种情况下有什么问题auto
?
平台:MSVC 10 SP 1、GCC 4.6.1
c++ - 将函数指针作为参数传递给 std::bind 中的另一个函数
我试图将传入的函数包装在 try-catch 子句中,以便我可以捕获它抛出的异常并在重新抛出之前进行一些清理。我已经编写了复制我的编译错误的示例代码。
我似乎无法弄清楚如何将函数指针传递给 lambda 表达式或绑定调用。似乎在调用bound() 时报错。有人可以提供一些建议或告诉我是否有什么误解吗?
c++ - std::bind 和重载函数
请参考以下代码片段。我想使用std::bind
for 重载函数foobar
。它只调用不带参数的方法。
c++ - 为什么从 bind 返回的对象会忽略额外的参数?
假设我有一个带有两个参数的函数,
我想绑定其中一个。我可以使用std::bind
如下:
partiallyBoundF
只接受一个参数,但我可以用多个参数来调用它。第一个以外的参数甚至不必是任何有意义的类型:
允许从返回的对象bind
传递额外参数的目的是什么?它允许编译调用错误,而这些错误会在其他任何地方被拒绝。
c++ - 如何结合使用 std::bind 和 std::shared_ptr
我需要经常做这样的事情:
AsyncOperation
作为任何自定义类实现(operator()
也称为函数对象)。
是否可以指示std::bind
使用 astd::shared_ptr
而不是 a std::ref
?这将防止内存泄漏,而我不需要保持对 的引用pAsyncOperation
,并且会在线程结束时自动删除AsyncOperation
,即这个异步任务的结束。
编辑:我并不总是可以访问 std::thread,线程库可以是 boost::thread 甚至任何其他平台相关线程。因此,无法访问 std::async。
我的主要问题是在 std::bind 中有所有权的概念。
c++ - 将 std::bind 与 __stdcall 函数一起使用
如何在 __stdcall 函数上使用 std::bind (而不是 boost::bind),或者在当前实现中甚至可能?当我尝试编译以下示例时:
或相同但将 func 声明为:
给我奇怪的构建输出(我包括在下面)。有一种非常恶心的方法可以让它编译:
但它不会让我调用这样的函数 (*proc)(0,0,0);。这是可悲的。这一切的发生只是因为 func - myhook - 声明为 __stdcall。当然,我可以编写一个肮脏的汇编技巧,它将在 func 的末尾推送 4 个 dwords,这将“使”它成为 __stdcall,但我不太确定这一点,而且这是更病态的方式。
c++ - std::bind、this 和 QtConcurrent
我正在尝试使用std::bind
绑定this
到中使用的方法QtConcurrent::blockingMapped
标题:
}
资源:
blockingMapped
所以我在这里做的是在每个ConfigNode
in上同时运行 step currentConfigs
。我使用std::bind
绑定this
到,step
所以它只需要一个参数,如blockingMapped
.
我越来越
和note: 2 arguments expected, 1 provided
我哪里做错了?
编辑
更正的工作版本(供将来“参考”):
标题:
资源:
c++ - C++11 随机数和 std::bind 以意想不到的方式交互
我正在使用 GCC 4.6.3 并尝试使用以下代码生成随机数:
我希望这两种方法都能生成一个由 5 个随机数组成的序列。相反,这是我实际得到的:
这是 GCC 错误吗?还是与 std::bind 有关的一些微妙问题?如果是这样,你能理解结果吗?
谢谢。
c++ - 如何用 std::bind 做到这一点?
(注意: 从标签中应该已经清楚了,这严格来说是 C++03。 是的,我知道,lambda 让所有这些痛苦消失了(并且带来了新的种类,我敢打赌),但这是一个嵌入式系统,使用 90 年代的操作系统版本,我被告知我应该很高兴我有一个 C++03 编译器(GCC4.1.x,BTW)或 C++ 编译器。所以请不要发布 C++11解决方案。真的不需要把它擦进去。当然
,当然std::bind()
,std::function()
等等实际上是在 中std::tr1
,但我编辑了 tr1
前缀,因为我认为它主要只是给代码增加了噪音。)
我有一些类似服务器的东西需要注册函数,我需要调整它们以调用某些对象的类似但略有不同的函数。这些函数有不同的参数列表。服务器“知道”,当我尝试注册一个函数时,它只接受一个具有正确签名的函数(std::function
即,根据需要正确),这取决于作为模板参数传入的一些魔术标签。
这是代码的草图:
这确实有效,但实际上有更多的功能,这样做是一种乏味的复制粘贴工作,侮辱了我的尊严感并产生了臭代码。由于所有这些函数的作用完全相同,唯一的区别是它们调用的函数以及它们有或没有要传递的参数,我应该能够将它们折叠成一个参数化函数,将差异隐藏在std::bind()
. 如果做不到这一点,我决定首先对所有没有任何参数的函数(如foo()
)执行此操作,这是绝大多数。
所以我想通过一个完成繁琐部分的函数来路由所有foo()
-like 函数的调用:X
Y::call_it
并将适当的函数X
作为参数绑定到它:
显然,这是错误的,我解决此问题的所有其他尝试也是如此。(我现在才玩std::bind()
了 10 周,所以请多多包涵)。最后,我迷失在一个令人难以置信的迷宫中,这些错误信息来自std::function
模板化的胆量,这些信息会让一个成年人落泪,至少应该养活一个心理医生和他的大家庭一年。
因此,在我出于纯粹的挫败感而自杀并使我的孩子成为孤儿之前——我该怎么做呢?
c++ - 如何避免使用 std::bind() 临时对象进行显式强制转换?
std::bind 的返回类型(有意)未指定。它可以存储在 std::function 中。
下面的示例程序显示了我必须如何将 std::bind() 返回的临时对象显式转换为 std::function 才能调用 fn1()。
如果 std::bind 的返回类型是已知的,我可以重载 Callback 构造函数,并且不再需要显式转换 std::bind 临时对象。
有什么办法可以避免显式演员表?
可能不相关,但我在 Linux 上使用 gcc 4.7.2。