问题标签 [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 投票
1 回答
1710 浏览

c# - C# 或 VB.NET 中的 std::bind 等效项

我正在将“同步”代码(即使用 Windows 事件等到其他线程完成某事)重构为“异步”代码(使用委托来实现回调机制)。

在同步代码中,有时我需要在等待结束后使用局部变量。当这样的代码异步时,那些局部变量会丢失(回调处理程序无法访问它们)。我可以将它们存储为类属性,但感觉很浪费。

在 C++ 中,我std::bind用来解决这个问题。我只需将尽可能多的参数添加到回调处理程序所需的局部变量,并在调用异步方法时绑定它们。例如,假设异步方法回调接收到一个类型为的对象,而调用者使用了两个类型为和CallbackParam的局部变量。LocalALocalB

在 C# 和 VB.NET 中是否有某种等价物?使用代表或其他东西?

更新:为了完整起见,这是基于@lasseespeholt 回答的我的示例的 C# 等效项:

0 投票
0 回答
1057 浏览

c++ - 使用 lambda 启动 pthread

由于我无法控制的原因,我必须使用堆栈大小减小的 pthread。但是,我仍然可以访问 C++11,所以我想写一些类似的东西std::async,让我在分离状态下启动一个 pthread,并运行任何函数,而不返回未来。本质上,std::async 用于返回 void 的函数。

我想出了以下代码,但它真的很难看,我想知道是否有更好的方法来解决这个问题。

0 投票
2 回答
1901 浏览

c++ - 理解 std::function 和 std::bind

我正在玩 std::function 和 std::bind ,我注意到一些不直观的东西,我想更好地理解它。

例如:

如何将 a 绑定function<void(int)>void()函数。然后我可以调用 f(1) 并获得 fun()。我想了解这是如何完成的。深入 Microsoft Visual Studio 2012 的实现让我迷失在无法阅读的宏的海洋中。所以这就是我在这里问这个问题的原因。

0 投票
1 回答
627 浏览

c++ - 在 C++ 中将 std::bind 与二进制操作函数一起使用

我正在尝试了解 std::bind 的工作原理。我写了以下内容:

std::transform 也接受二进制操作函数。所以我尝试编写 fun2 并使用 std::bind (主要的最后一行),但它不起作用。有人可以给我任何示例 std::bind 如何使用占位符(2,3 或更多)吗?

0 投票
1 回答
340 浏览

boost - 绑定 boost 有效,而 std 无效,有什么区别?

我试图用 std::bind 绑定一个函数,它一直说我的参数集没有重载。它与 boost::bind 一起工作。std 和 boost 绑定有什么区别?

我在用着:

Microsoft Visual Studio Ultimate 2012 版本 11.0.60315.01 更新 2

提升 1.53.0

func 声明和绑定:

错误:

105 IntelliSense:没有重载函数“std::bind”的实例与参数列表参数类型匹配:(void (Messenger::*)(const boost::system::error_code &error, size_t bytes_transferred, char *message, int bufferSize , boost::asio::ip::tcp::socket *socketPtr, void (*onMessageReceivedCallback)(char *message, std::string hostname, int port, int length)), Messenger *, std::_Ph<1 >, std::_Ph<2>, char *, int, boost::asio::ip::tcp::socket , void ( )(char *message, std::string hostname, int port, int length)) c:\Users\gospo_000\Source\Repos\Messenger\Messenger\Messenger\Messenger.cpp 176 4 Messenger

很多像这样的错误:

错误 81 错误 C2780:'enable_if::value,std::_BindRx(_thiscall _Farg0::*)(_V0_t,_V1_t,_V2_t,_V3_t,_V4_t),_Rx,_Farg0,_V0_t,_V1_t,_V2_t,_V3_t,_V4_t>,_Vx0_t ,_Vx1_t>>::type std::bind( Rx ( _thiscall _Farg0::* const )(_V0_t,_V1_t,_V2_t,_V3_t,_V4_t),_Vx0_t &&,_Vx1_t &&)' :需要 3 个参数 - 提供 8 个 c:\ users\gospo_000\source\repos\messenger\messenger\messenger\messenger.cpp 176 1 tester2

信使.h

信使.cpp

0 投票
1 回答
103 浏览

c++ - 如何更正在此模板代码中返回本地或临时?

我将 copy_if 绑定到将接受一对迭代器的函数对象中。我有一个警告,我要返回本地地址或临时地址。

据我所知,它来自于 std::pair 迭代器的绑定成员变量,但我不知道如何纠正它。我不明白为什么他们首先被认为是临时的。有人可以向我解释一下吗?

这是相关的代码。环境是 Visual Studio 2010 Ultimate,不太有用的是 Windows 7 Enterprise。

稍后,代码将执行以下操作:

0 投票
2 回答
3170 浏览

c++ - 带有 unique_ptr 参数的 std::function

给定一个函数

不可能(MSVC 2012)创建一个仿函数

问题不在于绑定 - 使用auto f = std::bind(...)工作。此外,使用 ashared_ptr也可以

  • 为什么 unique_ptr 不允许?
  • 这是 MSVC 问题还是一般 C++11 限制?
  • 有没有不改变函数定义的变通方法?
0 投票
2 回答
1298 浏览

c++ - 执行绑定的 std::function 抛出 std::bad_function_call

我想将成员函数绑定到std::function<void(void)>. 我听说成员函数需要一个额外的参数,即实例指针。因此我调用std::bind(&Class::Function, this, parameter)但是当我执行函数对象时,它会引发运行时错误。

Application.exe 中 0x748D4B32 处未处理的异常:Microsoft C++ 异常:内存位置 0x0114F4E8 处的 std::bad_function_call。

该参数是指向我自己struct的一个的指针。我怎么做错了?您还需要哪些额外信息?

更新:这是我的代码。

0 投票
2 回答
1567 浏览

c++ - 我应该看到 std::bind 和 boost::bind 之间的显着差异吗?

我正在探索 g++-4.7(具体来说是 Ubuntu/Linaro 4.7.3-2ubuntu~12.04)上对 C++11 的支持,我似乎正在寻找差异。

特别是,如果我在Boost #include <boost/bind.hpp>ASIO异步客户端示例(取自http://www.boost.org/doc/libs/1_45_0/doc/html/boost_asio/example/http/client /async_client.cpp),程序不再编译。boost::bindstd::bind

对此有何解释?

0 投票
2 回答
6546 浏览

c++ - std::bind 在作为右值引用传递时丢失引用

我有以下代码:

它输出

这意味着该callback函数获得了 的副本t而不是对 的引用t。我想知道发生了什么,因为std::bind它应该是完美的转发。