开发者

C++: conjunction of binds?

开发者 https://www.devze.com 2022-12-26 15:55 出处:网络
Suppose the following two functions: #include <iostream> #include <cstdlib> // atoi #include <cstring> // strcmp

Suppose the following two functions:

#include <iostream>
#include <cstdlib> // atoi
#include <cstring> // strcmp
#include <boost/bind.hpp>

bool match1(const char* a, const char* b) {
    return (strcmp(a, b) == 0);
}

bool match2(int a, const char* b) {
    return (atoi(b) == a);
}

Each of these functions takes two arguments, but can be transformed into a callable object that takes only one argument by using (std/boost)bind. Something along the lines of:

boost::bind(match1, "a test");
boost::bind(match2, 42);

I want to be able to obtain, from two functions like these that take one argument and return bool, a callable object that takes two arguments and returns the && of the bools. The type of the arguments is arbitrary.

Something like an operator&& for function开发者_如何学JAVAs that return bool.


The return type of boost::bind overloads operator && (as well as many others). So you can write

boost::bind(match1, "a test", _1) && boost::bind(match2, 42, _2);

If you want to store this value, use boost::function. In this case, the type would be

boost::function<bool(const char *, const char *)>

Note that this isn't the return type of boost::bind (that is unspecified), but any functor with the right signature is convertible to a boost::function.

0

精彩评论

暂无评论...
验证码 换一张
取 消