C++ unary function for logical true

boolean, c++, predicate, stl, unary-operator

Solution

You can use a lambda (since C++11):

bool anyValid = std::any_of(
    testVec.begin(), 
    testVec.end(), 
    [](bool x) { return x; }
);

And here's a live example.

You can, of course, use a functor as well:

struct logical_true {
    bool operator()(bool x) { return x; }
};

// ...

bool anyValid = std::any_of(testVec.begin(), testVec.end(), logical_true());

And here's a live example for that version.

Problem

I'm trying to use the any_of function on a vector of bool's. The any_of function requires a unary predicate function that returns a bool. However, I can't figure out what to use when the value input into the function is already the bool that I want. I would guess some function name like "logical_true" or "istrue" or "if" but none of these seem to work. I pasted some code below to show what I am trying to do. Thanks in advance for any ideas. --Chris ``` // Example use of any_of function. #include <algorithm> #include <functional> #include <iostream> #include <vector> using namespace std; int main(int argc, char *argv[]) { vector<bool>testVec(2); testVec[0] = true; testVec[1] = false; bool anyValid; anyValid = std::find(testVec.begin(), testVec.end(), true) != testVec.end(); // Without C++0x // anyValid = !std::all_of(testVec.begin(), testVec.end(), std::logical_not<bool>()); // Workaround uses logical_not // anyValid = std::any_of(testVec.begin(), testVec.end(), std::logical_true<bool>()); // No such thing as logical_true cout << "anyValid = " << anyValid <<endl; return 0; } ```

Original source

Related problems