问题标签 [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.
bind - std::bind 对具有多个参数的成员函数
我有这个代码
我从编译器(gcc 4.8.1)得到这个错误:
你能告诉我错误在哪里吗?
谢谢,
马西莫
c++ - 将 std::bind 与重载函数一起使用
我不知道如何使用 . 将参数绑定到重载函数std::bind
。不知何故std::bind
无法推断出重载类型(对于它的模板参数)。如果我不重载该功能,一切正常。下面的代码:
我的理解是std::bind
不能以某种方式推断出它的模板参数,因为f
它是重载的,但我不知道如何指定它们。我在代码中尝试了 4 种可能的方法(注释行),没有一个有效。如何指定函数的类型std::bind
?任何帮助深表感谢!
c++ - 与派生函数参数绑定
是否可以将函数与派生参数绑定?如果如何?我希望能够将函数点存储到具有相似签名的各种函数,即它们采用带有输入数据的类并返回带有输出值的类。但是不同的函数需要并提供不同的参数,因此我试图注册采用派生消息类的函数。
以下代码部分有效。我可以注册函数 MathService::blank,然后我可以调用它。但我无法添加 MathService::add。
我得到的错误是:
main.cpp:70:93: 错误:从 'std::_Bind_helper&)(RequestMessage&, ReplyMessage&), MathService&, const std::_Placeholder<1>&, const std::_Placeholder<2>&>::type {又名 std::_Bind(MathService*, std::_Placeholder<1>, std::_Placeholder<2>)>}' 到非标量类型 'Service::serviceFunction_t {aka std::function}' 请求 serviceFunction_t fn =绑定(方法指针,对象指针,占位符::_1,占位符::_2);
}
c++ - 更改函数指针签名并调用它以忽略返回类型是否安全?
在我们的代码库中,我们有使用(例如std::function<void()>
)存储的回调。有时我们希望将具有不同签名的函数绑定到回调,这可以使用 bind 来完成。这对于不同的函数参数很好,但是尝试将返回某些内容的函数绑定到期望返回 void 的回调不起作用,请参见此处。
我们找到的最简单的解决方案是将绑定函数的签名转换为具有相同参数但返回类型为 void 的函数:
这已经使用Visual Studio 2013 November CTP、cygwin clang 3.4.2和cygwin gcc 4.8.3进行了测试,并且适用于所有平台,但调用已转换为不同函数签名的函数指针是未定义的行为。
我知道某些调用约定可能会破坏它,但据我从Microsoft调用约定中可以看出,返回类型是通过寄存器而不是通过堆栈传递的。我们也从不指定不同的调用约定并始终使用默认值。
假设gcc、clang和Microsoft编译器不改变它们的行为,这是一种在绑定回调时忽略函数返回类型的安全方法吗?
c++ - Is there any way to check if an std::function points to a member of a valid object?
Let me demonstrate what I mean.
This outputs:
If we were to call the function like we would normally, replacing "function()" with "obj->printNumber()", the output is:
Just like you would expect it to be.
So my question is if there is any way to make sure that we are unable to call the function when the object has been deallocated? This has nothing to do with using smart pointers, it works the same way with regular pointers.
c++ - 绑定类函数观察者c++11
我正在尝试扩展主题观察者模式以从类中获取函数而不是静态函数。我在Simple Observer Pattern c++11中关注了 juan Chopanza EXCELLENT example 现在我想将一个类成员函数作为注册的回调而不是一个简单的函数传递。
我已经意识到我可以通过使用 bind(&class::member,instance) 来调用类成员,如下所示:
由于第一个参数 on 成为调用它的类。我得到了我想要的:
- 酒吧()
- A2_bar()
- A1_bar()
但现在我还想让通知将一些信息传递给观察者类。因此,我将代码修改为以下内容:
现在我想注册:
任何人都可以帮助我解决我所缺少的或如何做到这一点。我真的不想通过将 Observer 类添加到函数接口中来让我的 Subject 类知道它。谢谢
c++ - 如何通过引用将函数绑定到对象?
我有以下代码将成员函数绑定到类的实例:
但该std::bind
语句不f
通过引用绑定到。调用func
打印“100”而不是“1000”,这是我想要的。
但是,如果我将语句更改为采用指针,它就可以工作。
但f
根据我的理解,这是通过指针传递的,并且我认为std::bind
需要一个 r 值引用Arg&&
(如此处所示)这如何工作?
有人可以解释一下吗?
c++ - std::bind():以右值引用作为参数绑定 lambda
我正在使用std::bind
和右值引用,但我仍然不知道它是如何工作的,我有以下代码:
注释掉时bind_fun()
,或者如果 lambda 采用Dog&
而不是Dog&&
,代码运行良好并具有预期的输出。什么时候bind_fun()
不加注释,编译时出现如下错误:
我的问题是:
- 为什么
bind_fun()
当 lambda 采用右值引用时不能被调用(不会编译)? - 在这里使用引用和右值引用作为 lambda 的参数有什么区别?
c++ - 从 VS2008 移植到 VS2013 时绑定错误 C2668
我正在尝试将我的代码从 VS2008 移植到 VS2013,但我遇到了一些 std::bind 错误。错误说错误 C2668:'bind':对重载函数的模糊调用。这是一些代码:
此代码在 Visual Studio 2008 中有效,但在 Visual Studio 2013 中给出了上述错误。
显然,编译器很难确定我要调用哪个版本的 TipoLinea()。如果我将 getter 版本重命名为 getTipoLinea,错误就会消失。
以防万一它是相关的, SomeBase 是非抽象的,并且派生自 CObject (不确定为什么)和与这部分代码无关的接口。
谁能解释为什么VS2008对此没有任何问题以及如何防止它(当然,除了重命名函数之外)?
c++ - 如何在 std::bind 中使用模板函数参数?
我正在尝试创建一个并行化 for 的函数。我正在使用 SFML 的线程和带有模板的 std::bind。
这是我尝试过的。
错误是
no matching function for call to 'bind(<unresolved overloaded function type>, void (*&)(int&), std::vector<int>&, int, int)
我错过了一些非常重要的事情吗?