问题标签 [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 投票
1 回答
692 浏览

c++ - std::function 用于方法参数、副本还是 shared_ptr?

我正在尝试使用 std::function 作为回调处理程序。

像这样,

在这个例子中,我使用了传递引用。

但问题是,我不能保证该std::function对象callback仍然存在,因为该函数在我的程序的异步上下文中执行。

所以我必须管理函数对象的生命周期,我想了两种方法。

  1. 使用传值(复制)

  2. 使用std::shared_ptr

我知道std::function我的系统中的大小固定为 24 字节,std::shared_ptr为 8。

但是复制std::shared_ptr会导致管理它的引用计数器的额外开销。(此外,我找不到任何巧妙而巧妙的方法来制作 shared_ptr 的对象std::function。)

哪种方式在性能上会更好?

0 投票
1 回答
915 浏览

c++ - 算法函数:将其设为模板还是采用 std::function 参数?

我有一个名为 Graph 的 C++ 类,它有一个算法方法 for_each_node()。我可以将其设为模板,如下所示:

或者让它使用 std::function,像这样:

标准算法,例如 std::for_each,使用第一种方法,而一些库,例如 gtkmm(它是 GTK+ 的 C++ 绑定),将函数作为包含它们的对象的函数指针。

每个选项的优点和缺点是什么?我不确定该选择哪个。什么会影响选择:我的 Graph 类是否是类模板,或者算法方法需要使用多少不同的函数,或者速度要求?

0 投票
1 回答
1514 浏览

c++ - 在 C++11 之前有没有类似于 std::function 的东西?

std::function<>当 C++11 不可用时,应该使用什么构造作为代理?
替代方案基本上应该允许从另一个类访问一个类的私有成员函数,如下例所示(不使用 std::function 的其他特性)。Foo 类是固定的,不能改变太多,我只能访问类 Bar。

0 投票
2 回答
1171 浏览

c++ - Clang++ 生成泄漏内存的可执行文件,关于 std::function 和 lambda

ArchLinux (i686) 上的 Clang++ 3.2 用于构建以下 C++11 代码

clang++ test.cpp -std=c++0x && valgrind --leak-check=full --log-file=tmp.log.memcheck ./a.out然后我得到

我不确定该代码是否有任何问题(并且只导致一个字节泄漏),但如果使用 g++ 4.7 编译,则不会有内存泄漏。对此有何建议?

0 投票
6 回答
6087 浏览

c++ - 只返回传递值的默认函数?

作为一个懒惰的开发者,我喜欢使用这个技巧来指定一个默认函数:

但在一个非常特殊的情况下,我遇到了一个问题,如下所示:

在这种情况下,我希望默认函数相当于:([](const unsigned int i){return i;}一个只返回传递值的函数)。

为了做到这一点,我必须写什么而不是/*SOMETHING 1*/and /*SOMETHING 2*/

0 投票
2 回答
233 浏览

c++ - 奇怪的模板语法

我一直在查看 gcc-4.7.2 的源代码,std::functionstd::bind遇到了一些我不理解的用于成员函数指针的语法。

我不明白的是_Maybe_wrap_member_pointer

  • _Tp为什么和之间没有逗号_Class::*

  • 给定成员函数void foo::bar()(在下面的示例应用程序中),这里将解决什么_Tp问题_Class::*

下面是我的示例应用程序,它绑定了成员函数指针和对象。(我已经提取了与std::bind成员函数的专业化/内部相关的源代码)

0 投票
1 回答
6773 浏览

c++ - C++ 将任意函数从 DLL 动态加载到 std::function

如何使用单个函数将任意动态链接库(dll) 函数加载到对象中?std::function

例如,我想将两个函数编译成一个 dll:

并在运行时使用这样的单个函数加载它们:

0 投票
2 回答
2337 浏览

c++ - 是否存在函数指针未涵盖的 std::function 用例,或者它只是语法糖?

与函数指针相比​​,std::function 的符号非常好。但是,除此之外,我找不到不能用指针替换它的用例。那么它只是函数指针的语法糖吗?

0 投票
2 回答
183 浏览

c++ - 您可以将任何指针类型或基类传递给函数 typedef

我有这个代码

它工作正常,直到 bar 采用扩展 ClassX 而不是 ClassX 的 ClassY。

我得到编译时错误:main.cpp:22:9: No matching member function for call to 'createCaller'

问题是我将如何允许 bar 获取扩展 ClassX 的任何类或任何类的参数?有可能吗?

0 投票
3 回答
2469 浏览

c++ - std::function 代替谓词的模板

许多标准库算法采用谓词函数。但是,这些谓词的类型是用户提供的任意模板参数。为什么 C++11 不指定这些采用特定类型,例如std::function?例如:

使用 this 而不是模板作为参数类型不是更干净吗?