问题标签 [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.

0 投票
2 回答
264 浏览

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

0 投票
1 回答
514 浏览

c++ - 将函数指针作为参数传递给 std::bind 中的另一个函数

我试图将传入的函数包装在 try-catch 子句中,以便我可以捕获它抛出的异常并在重新抛出之前进行一些清理。我已经编写了复制我的编译错误的示例代码。

我似乎无法弄清楚如何将函数指针传递给 lambda 表达式或绑定调用。似乎在调用bound() 时报错。有人可以提供一些建议或告诉我是否有什么误解吗?

0 投票
1 回答
13100 浏览

c++ - std::bind 和重载函数

请参考以下代码片段。我想使用std::bindfor 重载函数foobar。它只调用不带参数的方法。

0 投票
1 回答
2036 浏览

c++ - 为什么从 bind 返回的对象会忽略额外的参数?

假设我有一个带有两个参数的函数,

我想绑定其中一个。我可以使用std::bind如下:

partiallyBoundF只接受一个参数,但我可以用多个参数来调用它。第一个以外的参数甚至不必是任何有意义的类型:

允许从返回的对象bind传递额外参数的目的是什么?它允许编译调用错误,而这些错误会在其他任何地方被拒绝。

0 投票
2 回答
12175 浏览

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 中有所有权的概念。

0 投票
1 回答
2702 浏览

c++ - 将 std::bind 与 __stdcall 函数一起使用

如何在 __stdcall 函数上使用 std::bind (而不是 boost::bind),或者在当前实现中甚至可能?当我尝试编译以下示例时:

或相同但将 func 声明为:

给我奇怪的构建输出(我包括在下面)。有一种非常恶心的方法可以让它编译:

但它不会让我调用这样的函数 (*proc)(0,0,0);。这是可悲的。这一切的发生只是因为 func - myhook - 声明为 __stdcall。当然,我可以编写一个肮脏的汇编技巧,它将在 func 的末尾推送 4 个 dwords,这将“使”它成为 __stdcall,但我不太确定这一点,而且这是更病态的方式。

0 投票
1 回答
1529 浏览

c++ - std::bind、this 和 QtConcurrent

我正在尝试使用std::bind绑定this到中使用的方法QtConcurrent::blockingMapped

标题:

}

资源:

blockingMapped所以我在这里做的是在每个ConfigNodein上同时运行 step currentConfigs。我使用std::bind绑定this到,step所以它只需要一个参数,如blockingMapped.

我越来越

note: 2 arguments expected, 1 provided

我哪里做错了?

编辑

更正的工作版本(供将来“参考”):

标题:

资源:

0 投票
3 回答
2793 浏览

c++ - C++11 随机数和 std::bind 以意想不到的方式交互

我正在使用 GCC 4.6.3 并尝试使用以下代码生成随机数:

我希望这两种方法都能生成一个由 5 个随机数组成的序列。相反,这是我实际得到的:

这是 GCC 错误吗?还是与 std::bind 有关的一些微妙问题?如果是这样,你能理解结果吗?

谢谢。

0 投票
2 回答
2114 浏览

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 函数的调用:XY::call_it

并将适当的函数X作为参数绑定到它:

显然,这是错误的,我解决此问题的所有其他尝试也是如此。(我现在才玩std::bind()了 10 周,所以请多多包涵)。最后,我迷失在一个令人难以置信的迷宫中,这些错误信息来自std::function模板化的胆量,这些信息会让一个成年人落泪,至少应该养活一个心理医生和他的大家庭一年。

因此,在我出于纯粹的挫败感而自杀并使我的孩子成为孤儿之前——我该怎么做呢?

0 投票
1 回答
1397 浏览

c++ - 如何避免使用 std::bind() 临时对象进行显式强制转换?

std::bind 的返回类型(有意)未指定。它可以存储在 std::function 中。

下面的示例程序显示了我必须如何将 std::bind() 返回的临时对象显式转换为 std::function 才能调用 fn1()。

如果 std::bind 的返回类型是已知的,我可以重载 Callback 构造函数,并且不再需要显式转换 std::bind 临时对象。

有什么办法可以避免显式演员表?

可能不相关,但我在 Linux 上使用 gcc 4.7.2。