我试图揭露

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/

10-11 22:49
查看更多