Skip to content

Instantly share code, notes, and snippets.

@Furkanzmc
Created September 2, 2018 17:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Furkanzmc/8533db807fd96f3750d94846da3f6954 to your computer and use it in GitHub Desktop.
Save Furkanzmc/8533db807fd96f3750d94846da3f6954 to your computer and use it in GitHub Desktop.
DRY Multicomparisons
template <typename Type, typename ComparisonFunc = std::equal_to<Type>>
class is
{
public:
constexpr is(Type t)
: m_Value(std::move(t))
{}
bool any_of(const std::initializer_list<Type> &list) const
{
return std::any_of(list.begin(), list.end(), std::bind(ComparisonFunc(), m_Value, std::placeholders::_1));
}
bool any_of(const std::initializer_list<Type> &&list) const
{
return std::any_of(list.begin(), list.end(), std::bind(ComparisonFunc(), m_Value, std::placeholders::_1));
}
bool all_of(const std::initializer_list<Type> &list) const
{
return std::all_of(list.begin(), list.end(), std::bind(ComparisonFunc(), m_Value, std::placeholders::_1));
}
bool all_of(const std::initializer_list<Type> &&list) const
{
return std::all_of(list.begin(), list.end(), std::bind(ComparisonFunc(), m_Value, std::placeholders::_1));
}
bool none_of(const std::initializer_list<Type> &list) const
{
return std::none_of(list.begin(), list.end(), std::bind(ComparisonFunc(), m_Value, std::placeholders::_1));
}
bool none_of(const std::initializer_list<Type> &&list) const
{
return std::none_of(list.begin(), list.end(), std::bind(ComparisonFunc(), m_Value, std::placeholders::_1));
}
private:
Type m_Value;
};
@Furkanzmc
Copy link
Author

Example Usage:

int main(int /*argc*/, const char */*argv*/[])
{
    std::initializer_list<int> lvalueList{1, 2, 3};
    std::cout << is<int>(2).any_of(lvalueList) << std::endl; // Outputs 1
    std::cout << is<int, std::greater<int>>(5).all_of({1, 2, 3}) << std::endl; // Outputs 1
    std::cout << is<int, std::less<int>>(0).all_of({1, 2, 3}) << std::endl; // Outputs 1
    return 0;
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment