问题标签 [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# - C# 或 VB.NET 中的 std::bind 等效项
我正在将“同步”代码(即使用 Windows 事件等到其他线程完成某事)重构为“异步”代码(使用委托来实现回调机制)。
在同步代码中,有时我需要在等待结束后使用局部变量。当这样的代码异步时,那些局部变量会丢失(回调处理程序无法访问它们)。我可以将它们存储为类属性,但感觉很浪费。
在 C++ 中,我std::bind
用来解决这个问题。我只需将尽可能多的参数添加到回调处理程序所需的局部变量,并在调用异步方法时绑定它们。例如,假设异步方法回调接收到一个类型为的对象,而调用者使用了两个类型为和CallbackParam
的局部变量。LocalA
LocalB
在 C# 和 VB.NET 中是否有某种等价物?使用代表或其他东西?
更新:为了完整起见,这是基于@lasseespeholt 回答的我的示例的 C# 等效项:
c++ - 使用 lambda 启动 pthread
由于我无法控制的原因,我必须使用堆栈大小减小的 pthread。但是,我仍然可以访问 C++11,所以我想写一些类似的东西std::async
,让我在分离状态下启动一个 pthread,并运行任何函数,而不返回未来。本质上,std::async 用于返回 void 的函数。
我想出了以下代码,但它真的很难看,我想知道是否有更好的方法来解决这个问题。
c++ - 理解 std::function 和 std::bind
我正在玩 std::function 和 std::bind ,我注意到一些不直观的东西,我想更好地理解它。
例如:
如何将 a 绑定function<void(int)>
到void()函数。然后我可以调用 f(1) 并获得 fun()。我想了解这是如何完成的。深入 Microsoft Visual Studio 2012 的实现让我迷失在无法阅读的宏的海洋中。所以这就是我在这里问这个问题的原因。
c++ - 在 C++ 中将 std::bind 与二进制操作函数一起使用
我正在尝试了解 std::bind 的工作原理。我写了以下内容:
std::transform 也接受二进制操作函数。所以我尝试编写 fun2 并使用 std::bind (主要的最后一行),但它不起作用。有人可以给我任何示例 std::bind 如何使用占位符(2,3 或更多)吗?
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
c++ - 如何更正在此模板代码中返回本地或临时?
我将 copy_if 绑定到将接受一对迭代器的函数对象中。我有一个警告,我要返回本地地址或临时地址。
据我所知,它来自于 std::pair 迭代器的绑定成员变量,但我不知道如何纠正它。我不明白为什么他们首先被认为是临时的。有人可以向我解释一下吗?
这是相关的代码。环境是 Visual Studio 2010 Ultimate,不太有用的是 Windows 7 Enterprise。
稍后,代码将执行以下操作:
c++ - 带有 unique_ptr 参数的 std::function
给定一个函数
不可能(MSVC 2012)创建一个仿函数
问题不在于绑定 - 使用auto f = std::bind(...)
工作。此外,使用 ashared_ptr
也可以
- 为什么 unique_ptr 不允许?
- 这是 MSVC 问题还是一般 C++11 限制?
- 有没有不改变函数定义的变通方法?
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
的一个的指针。我怎么做错了?您还需要哪些额外信息?
更新:这是我的代码。
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::bind
std::bind
对此有何解释?
c++ - std::bind 在作为右值引用传递时丢失引用
我有以下代码:
它输出
这意味着该callback
函数获得了 的副本t
而不是对 的引用t
。我想知道发生了什么,因为std::bind
它应该是完美的转发。