我试图揭露
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/