c++ - 按值传递 std::function<bool (int)>

标签 c++ windows macos

我是想曝光

typedef std::function<bool (int)> Filter;

这是

的一部分
#include <functional>

这样用户就可以创建过滤器并将其传递到我的组件中进行处理。该要求要求处理不能在模板函数中完成。

我知道在接口(interface)上使用 STL 不是一个好的做法,因为 Filter 类型的大小取决于 STL 实现。除了原始函数指针由模板函数接收的仿函数,我还有哪些替代选择。

最佳答案

大小在这里不是很重要,但如果使用您的库的某个人使用不同的 STL 实现,那么您的代码将无法使用,那么另一种选择是什么?我将为此使用一个接口(interface)(纯虚拟类):

struct MyCallback {
    virtual bool filter( int ) = 0;
};
class MyImplementation {
public:
    ...
    void set_callbacks( MyCallback* );
};

使用这种架构,您可以让您的用户使用 C++ 的强大功能,同时您不依赖于 STL!

关于c++ - 按值传递 std::function<bool (int)>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12853327/

相关文章:

vb.net - Mono VB .Net 应用程序,缺少 System.Collections.Generic Mac OS X

c++ - 为什么 istream::getline() 返回这么多次(什么都没有)

windows - PowerShell ISE 与脚本

windows - 在目录中搜索字符串

cocoa - Mac 应用程序归档 - Apple Mach-O 链接器 (Id) 错误

objective-c - Cocoa (OSX) 拖放 promise 的文件 - 它们什么时候可以使用?

java - 无法通过 UDP protobuf 将大于 127 的整数值从 C++ 发送到 Java

c++ - 如何使用 C++ 读取文件并打印到控制台而不使用变量?

c++ - 如何获取 CMenu 对象中所有子菜单的零基索引

windows - Git fatal error : remote end hung up