问题标签 [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() 创建数据成员?
我正在使用 C++11 不错的新生成器和分布生成随机值。在一个函数中,它就像一个魅力,看起来像这样:
但是如何将所有三个对象作为数据成员放在一个类中?我可以简单地将generator
and写distribution
为数据成员,但是如何在dice
不知道(或想知道)其确切类型的情况下创建数据成员?令人惊讶的是这
error C2660: 'bind' : function does not take 2 arguments
在 Visual Studio 2013 中产生错误。
c++ - Partial Binding of Function Arguments
Is there a way to partially bind the first/last n arguments of a callable object (e.g. function) without explicitly specifying the rest of the arguments?
std::bind()
seems to require that all the arguments are be bound, those that are to be left should be bound to std::placeholders::_1
,_2
,_3
etc.
Is it possible to write a bind_first()
/bind_last()
for partial binding starting from the first/last argument and that automagically inserts the placeholders for any remaining unbound arguments in their original order in their the original position?
c++ - c++11绑定和应用?
std::bind
有时被描述为“部分应用”。为什么当一个函数的所有参数都被绑定时,函数本身没有被应用?
例如,以下代码不打印任何内容。
有没有办法编写一个可以在所有参数都固定时应用该函数的绑定变体?
- 更新 -
我从现在的回复中了解到,这std::bind
并不完全是部分应用。所以,在问题的第二部分,我怎么能写像 std::bind 这样的东西,但做部分应用。我知道bind(bind(f,1,_1),"Hi!")()
将调用最终的 0 元函数并返回结果值(1Hi
在示例中打印)。是否可以做模板编程在bind的终端情况下调用函数调用operator()?
换句话说,是否可以编写一个函数bind1
:
,这样std::is_placeholder<T>::value == 0
对于 的每个成员args
,
bind1()
除了什么之外,还可以std::bind()
调用 operator() 吗?
c++ - 使用 C++11 std::bind 和 auto 为回调函数参数编译错误
您好我在编译以下代码时遇到问题。我正在使用 auto 和 std::bind 来绑定带有参数的回调函数。但是,在将此回调函数作为参数传递后,它会出现编译问题。您是否看到以下函数声明存在问题:
请参阅下面的编译错误日志:
我想我的问题可以简化为:
playSingleAd() 的函数声明需要什么才能成功编译以下内容?:
c++ - c++:如何编写一个类似 std::bind 的对象来检查多余的参数?
根据http://en.cppreference.com/w/cpp/utility/functional/bind,对于std::bind
成员函数 operator()
...
如果在调用 g() 时提供的某些参数与存储在 g 中的任何占位符都不匹配,则评估并丢弃未使用的参数。
引用示例,可以执行以下操作:
如果您将其视为具有 5 个参数的函数,其中 3 个是固定的,那么根据常识f1
,您应该无法使用 3 个参数进行调用。f1
但是,如上面的代码所示,您可以这样做,因为额外的参数会被忽略。
根据为什么从绑定返回的对象会忽略额外的参数?,这种行为之所以存在,是因为实现起来很方便???。
对我来说,这是一个相当令人困惑的库特性,因为它弄乱了函数的数量(例如,上面示例中的 5 - 3 = 3)并破坏了函数调用的推理。我想知道是否有任何实际用例使这种行为实际上是有益的?
更重要的是,是否可以实现一个变体std::bind
来禁止这种行为?这里有什么可能和困难。
谢谢
c++ - 延迟函数调用中的延迟函数调用
基本上我想做的是:
显然这行不通。我需要以某种方式包装getInt
调用,以便它在std::plus
函数发生之前发生。那么这一切都需要推迟到我打电话来delayedAdd
。
我在 QObject 之外使用 Qt5.0,所以我不能connect
将 lambda 转换为SLOT
. 但我想要connect
类似的东西delayedAdd
来SLOT
代替。
+标签功能
c++ - 具有多态性的 std::bind 和 boost::bind 之间的区别
我有一个派生类,我从该派生类中绑定了一个在此类中没有覆盖的虚函数,因此我希望调用父类中的一个。
它适用于 boost (1.55),但如果我从 C++11 切换到 std::bind,它会拒绝编译
错误 C2100:非法间接 1> 功能(1152):参见对函数模板实例化的引用 '_Rx std::_Pmf_wrap<_Pmf_t,_Rx,_Farg0,_V0_t,_V1_t,_V2_t,_V3_t,_V4_t,_V5_t,>::operator ()( _Wrapper &) const' 正在编译 1> with 1> [ 1> _Rx=bool, 1> _Pmf_t=bool (__thiscall Base::* )(void), 1> _Farg0=Base, 1> _V0_t=std::_Nil, 1> _V1_t=std::_Nil, 1> _V2_t=std::_Nil, 1> _V3_t=std::_Nil, 1> _V4_t=std::_Nil, 1> _V5_t=std::_Nil, 1> =std: :_Nil, 1> _Wrapper=派生 1> ]
这是最低限度的代码
这不是一个主要问题,因为我可以坚持使用 boost,但我真的很想知道两者之间有什么区别。
我在这里检查了几个问题,但我不认为它与this有什么关系。在这里也检查了 stroustrup 的网站,但我没有看到任何可以解释这种行为的东西。
我在这里想念什么?
Ps:我使用VS2012 Update 4,如果这可以帮助
c++ - 使用 std::bind 和 std::function
EDIT3:如果我删除第二个 createTriangle 函数,它可以工作。那么如何绑定重载函数呢?
我有一个函数,它接受一个带有一个参数的函数对象,如下所示:
如何使用 std::bind 调用此函数?我试过这样:
但这给了我一个错误:
候选模板被忽略:无法推断模板参数
ClassA::createTriangle 是一个静态函数。
附加信息:
ClassA 中还有另一个静态 createTriangle 函数,但最后一个参数不同。这可能是个问题吗?bind 不知道选择哪个 createTriangle 吗?它看起来像这样:
c++ - C++ 11 std::bind 工作奇怪
它是事件管理器,其工作原理见main()。所以,代码:
输出是:
无效 SomeCallback(int, float): 12 1.0
无效 SomeCallback(int, float): 12 1.0
如果我换行:
输出变成了这样:
无效 SomeCallback(int, float): 10 10600.0
无效 SomeCallback(int, float): 10 10600.0
调试器显示,m_Queue 中的所有数据都是正确的。
这意味着,队列中的数据是这样的:
第一个:func: void(int,float); 参数:12、1.0f;
第二:func:void(int,float);参数:10、10600.0f;
怎么了?哪里出错了?
PS我new std::function<void()>;
只是为了尝试解决错误......
视觉工作室 2013(12.0.30..)
c++ - 为什么 std::bind 在这个例子(成员函数)中没有占位符就不能工作?
例如,这是我的成员函数 ( do_it
):
...我用std::bind
它使它看起来像一个非成员函数:
但它不起作用,以下是编译器错误消息:
我必须使用以下方法修复它std::placeholders
:
为什么不指定就不起作用std::placeholders
?