问题标签 [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.

0 投票
2 回答
504 浏览

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 和模板......

那么,有没有解决方案?

谢谢

0 投票
1 回答
5958 浏览

c++ - 将 boost::function 转换为 std::function

我正在更新我们的一些旧代码以使用 C++11 功能代替 boost 等价物。然而,并非一切都是简单的命名空间替换,如无序容器和智能指针。

例如boost::function有方法empty()clear()没有std::function

有一个我一直用来替换引用的operator()定义,但是我应该用什么来替换引用?std::functionempty()clear()

我考虑过使用std::function赋值运算符并赋值nullptr来清除它,但我担心可能会产生无意的副作用,不仅会清除底层函数,还会使对象不可用。

显然,更好的解决方案是默认初始化任何可重用的成员函数对象,这样总是有一个有效的回调,可以简单地用用户提供的回调来更新,但我现在的目标是直接替换以前的用法而不是代码审查。

0 投票
3 回答
2534 浏览

c++ - 删除向量的任何元素> 绑定到成员函数

如何删除绑定到对象成员函数的this函数:

0 投票
1 回答
593 浏览

c++ - C++11 可变参数函数类型模板参数

可能重复:
“……”令牌的含义是什么?

有一种相对较新的方法可以直接指定函数类型(至少,作为模板参数)。不知道这是否是严格的 C++11,但我在阅读 GCC 4.7 的 STL 标头时遇到了它。

就像这样:

现在,在头文件<functional>中,我看到以下内容:

这是可以理解的:SomeStruct具有返回类型R和参数类型的函数类型的显式特化A

但是考虑这个声明(在下一行):

那个双省略号是什么意思?

0 投票
0 回答
105 浏览

c++ - libc++ 中的 std::function 回调

可能重复:
std::function 的复制构造函数是否要求模板类型的参数类型是完整类型?

我有一个简单的类,它在 std::function 上构建了一个回调,但它不是用 C++11/libc++ 构建的。我想我看到了错误,但我不知道解决方案。

完整的错误日志:

因此, std::function 并不完整。但我希望这个类能够引用一个回调,这个类。所以我有点苦恼。有人知道如何用 C++11 处理这个问题吗?

注意:此代码在使用时编译没有问题<tr1/functional>

0 投票
7 回答
10971 浏览

c++ - 绑定到一个weak_ptr

有没有办法将std::bind 绑定到 std::weak_ptr?我想存储一个“弱函数”回调,当被调用者被销毁时会自动“断开”。

我知道如何使用 shared_ptr 创建 std::function:

然而,返回的 std::function 让我的对象永远活着。所以我想将它绑定到一个weak_ptr

但这不编译。(std::bind 将不接受weak_ptr!)有没有办法绑定到weak_ptr?

我找到了关于这个的讨论(见下文),但似乎没有标准的实现。存储“弱功能”的最佳解决方案是什么,特别是在 Boost 不可用的情况下?


讨论/研究(所有这些都使用 Boost 并且没有标准化):

0 投票
2 回答
1650 浏览

c++ - 什么是“有效”的 std::function?

这里:

http://en.cppreference.com/w/cpp/utility/functional/function

operator bool描述:“检查存储的可调用对象是否有效”。

大概构造的默认值std::function无效,但这是唯一的情况吗?

另外,它如何检查它是否有效?

是否operator()会引发std::bad_function_call对象无效的情况?

0 投票
1 回答
2076 浏览

c++ - 以可变方式绑定成员函数

我有一个带有可变数量参数的成员函数,存储在 astd::function中,我想绑定实例并获取一个独立的函数对象。

对于固定数量的参数,我会使用std::bind,但我不知道如何为可变参数执行此操作。

0 投票
2 回答
991 浏览

c++ - std::function 复制参数?

我的代码:

我在控制台上看到两次“复制的 A”。为什么对象被复制两次,而不是一次?我怎样才能正确防止这种情况?

0 投票
1 回答
1958 浏览

c++ - 使用基于模板的构造函数构造 std::function

是否可以std::function使用模板参数定义的类型的构造函数来构造 a ?

例如: