问题标签 [std-function]
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::function 的函数对象中获取状态
我想从函数对象中检索状态。但是函数对象已被转换为function<>
模板。我该怎么做?
我是说:
功能对象:
在主要。我的第一步是直接使用对象:
它的节目:
构造函数(a)调用
10
11
计数器:12
没关系,这是我所期望的。
但在
表明
构造函数(a)调用
10
11
计数器:10
啊!,我认为 f 是真实对象的包装器,所以修改f
我们真的修改了b
. 否:f
有 的副本b
,但我无法调用f.getCounter()
我如何从 中获取 State (counter_var) f
?
我不能直接使用Counter
类(在这个例子中),因为我有一些其他类似的具有相同签名“void(int)”的类,我想在调用者函数中模糊地使用它们。
我可以完全避免std::function
为我的所有函数对象使用公共基类的模板,但我认为有一个解决方案更 C++11 与 STL 和模板......
那么,有没有解决方案?
谢谢
c++ - 将 boost::function 转换为 std::function
我正在更新我们的一些旧代码以使用 C++11 功能代替 boost 等价物。然而,并非一切都是简单的命名空间替换,如无序容器和智能指针。
例如boost::function
有方法empty()
但clear()
没有std::function
。
有一个我一直用来替换引用的operator()
定义,但是我应该用什么来替换引用?std::function
empty()
clear()
我考虑过使用std::function
赋值运算符并赋值nullptr
来清除它,但我担心可能会产生无意的副作用,不仅会清除底层函数,还会使对象不可用。
显然,更好的解决方案是默认初始化任何可重用的成员函数对象,这样总是有一个有效的回调,可以简单地用用户提供的回调来更新,但我现在的目标是直接替换以前的用法而不是代码审查。
c++ - 删除向量的任何元素> 绑定到成员函数
如何删除绑定到对象成员函数的this
函数:
c++ - C++11 可变参数函数类型模板参数
可能重复:
“……”令牌的含义是什么?
有一种相对较新的方法可以直接指定函数类型(至少,作为模板参数)。不知道这是否是严格的 C++11,但我在阅读 GCC 4.7 的 STL 标头时遇到了它。
就像这样:
现在,在头文件<functional>
中,我看到以下内容:
这是可以理解的:SomeStruct
具有返回类型R
和参数类型的函数类型的显式特化A
。
但是考虑这个声明(在下一行):
那个双省略号是什么意思?
c++ - libc++ 中的 std::function 回调
我有一个简单的类,它在 std::function 上构建了一个回调,但它不是用 C++11/libc++ 构建的。我想我看到了错误,但我不知道解决方案。
完整的错误日志:
因此, std::function 并不完整。但我希望这个类能够引用一个回调,这个类。所以我有点苦恼。有人知道如何用 C++11 处理这个问题吗?
注意:此代码在使用时编译没有问题<tr1/functional>
c++ - 绑定到一个weak_ptr
有没有办法将std::bind 绑定到 std::weak_ptr?我想存储一个“弱函数”回调,当被调用者被销毁时会自动“断开”。
我知道如何使用 shared_ptr 创建 std::function:
然而,返回的 std::function 让我的对象永远活着。所以我想将它绑定到一个weak_ptr:
但这不编译。(std::bind 将不接受weak_ptr!)有没有办法绑定到weak_ptr?
我找到了关于这个的讨论(见下文),但似乎没有标准的实现。存储“弱功能”的最佳解决方案是什么,特别是在 Boost 不可用的情况下?
讨论/研究(所有这些都使用 Boost 并且没有标准化):
c++ - 什么是“有效”的 std::function?
这里:
http://en.cppreference.com/w/cpp/utility/functional/function
operator bool
描述:“检查存储的可调用对象是否有效”。
大概构造的默认值std::function
无效,但这是唯一的情况吗?
另外,它如何检查它是否有效?
是否operator()
会引发std::bad_function_call
对象无效的情况?
c++ - 以可变方式绑定成员函数
我有一个带有可变数量参数的成员函数,存储在 astd::function
中,我想绑定实例并获取一个独立的函数对象。
对于固定数量的参数,我会使用std::bind
,但我不知道如何为可变参数执行此操作。
c++ - std::function 复制参数?
我的代码:
我在控制台上看到两次“复制的 A”。为什么对象被复制两次,而不是一次?我怎样才能正确防止这种情况?
c++ - 使用基于模板的构造函数构造 std::function
是否可以std::function
使用模板参数定义的类型的构造函数来构造 a ?
例如: