什么是 "a>b" 作为需要函数指针或 lambda 表达式的参数?

What is "a>b" as a parameter which requires a function pointer or lambda expression?

下面是boost::log::set_filter,

的非常简单的使用
#include <boost/log/trivial.hpp>
#include <boost/log/core.hpp>
#include <boost/log/trivial.hpp>
#include <boost/log/expressions.hpp>
#include <boost/log/utility/setup/file.hpp>
namespace logging = boost::log;

void test()
{
logging::add_file_log("sample.log")->set_filter(
    logging::trivial::severity >= logging::trivial::info
);
}

根据set_filter的定义,

template< typename FunT >
    void set_filter(FunT const& filter)
    {
        BOOST_LOG_EXPR_IF_MT(boost::log::aux::exclusive_lock_guard< mutex_type > lock(m_Mutex);)
        m_Filter = filter;
    }

filter 应该是函数指针或 lambda 表达式。什么是 logging::trivial::severity >= logging::trivial::info 以及如何将其转换为函数?

用户自定义>=的结果可以是任何类型,不一定是bool。在这种情况下,库作者定义了一个>=即returns一个函数对象。

草图大概是这样的

struct severity_t {} severity;

enum severity_level {
    info,
    ...
};

struct greater_equal_filter
{
    severity_level level;
    bool operator()(severity_level other) { return other >= level; }
};

greater_equal_filter operator>=(severity_t, severity_level level) {
    return { level };
}