问题标签 [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 用于方法参数、副本还是 shared_ptr?
我正在尝试使用 std::function 作为回调处理程序。
像这样,
在这个例子中,我使用了传递引用。
但问题是,我不能保证该std::function
对象callback
仍然存在,因为该函数在我的程序的异步上下文中执行。
所以我必须管理函数对象的生命周期,我想了两种方法。
使用传值(复制)
使用
std::shared_ptr
我知道std::function
我的系统中的大小固定为 24 字节,std::shared_ptr
为 8。
但是复制std::shared_ptr
会导致管理它的引用计数器的额外开销。(此外,我找不到任何巧妙而巧妙的方法来制作 shared_ptr 的对象std::function
。)
哪种方式在性能上会更好?
c++ - 算法函数:将其设为模板还是采用 std::function 参数?
我有一个名为 Graph 的 C++ 类,它有一个算法方法 for_each_node()。我可以将其设为模板,如下所示:
或者让它使用 std::function,像这样:
标准算法,例如 std::for_each,使用第一种方法,而一些库,例如 gtkmm(它是 GTK+ 的 C++ 绑定),将函数作为包含它们的对象的函数指针。
每个选项的优点和缺点是什么?我不确定该选择哪个。什么会影响选择:我的 Graph 类是否是类模板,或者算法方法需要使用多少不同的函数,或者速度要求?
c++ - 在 C++11 之前有没有类似于 std::function 的东西?
std::function<>
当 C++11 不可用时,应该使用什么构造作为代理?
替代方案基本上应该允许从另一个类访问一个类的私有成员函数,如下例所示(不使用 std::function 的其他特性)。Foo 类是固定的,不能改变太多,我只能访问类 Bar。
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 编译,则不会有内存泄漏。对此有何建议?
c++ - 只返回传递值的默认函数?
作为一个懒惰的开发者,我喜欢使用这个技巧来指定一个默认函数:
但在一个非常特殊的情况下,我遇到了一个问题,如下所示:
在这种情况下,我希望默认函数相当于:([](const unsigned int i){return i;}
一个只返回传递值的函数)。
为了做到这一点,我必须写什么而不是/*SOMETHING 1*/
and /*SOMETHING 2*/
?
c++ - 奇怪的模板语法
我一直在查看 gcc-4.7.2 的源代码,std::function
并std::bind
遇到了一些我不理解的用于成员函数指针的语法。
我不明白的是_Maybe_wrap_member_pointer
:
_Tp
为什么和之间没有逗号_Class::*
?给定成员函数
void foo::bar()
(在下面的示例应用程序中),这里将解决什么_Tp
问题_Class::*
?
下面是我的示例应用程序,它绑定了成员函数指针和对象。(我已经提取了与std::bind
成员函数的专业化/内部相关的源代码)
c++ - C++ 将任意函数从 DLL 动态加载到 std::function
如何使用单个函数将任意动态链接库(dll) 函数加载到对象中?std::function
例如,我想将两个函数编译成一个 dll:
并在运行时使用这样的单个函数加载它们:
c++ - 是否存在函数指针未涵盖的 std::function 用例,或者它只是语法糖?
与函数指针相比,std::function 的符号非常好。但是,除此之外,我找不到不能用指针替换它的用例。那么它只是函数指针的语法糖吗?
c++ - 您可以将任何指针类型或基类传递给函数 typedef
我有这个代码
它工作正常,直到 bar 采用扩展 ClassX 而不是 ClassX 的 ClassY。
我得到编译时错误:main.cpp:22:9: No matching member function for call to 'createCaller'
问题是我将如何允许 bar 获取扩展 ClassX 的任何类或任何类的参数?有可能吗?
c++ - std::function 代替谓词的模板
许多标准库算法采用谓词函数。但是,这些谓词的类型是用户提供的任意模板参数。为什么 C++11 不指定这些采用特定类型,例如std::function
?例如:
使用 this 而不是模板作为参数类型不是更干净吗?