c – 确定仿函数的参数和结果类型

如何测试functor是否是一个可调用的对象,它引用一个int并返回一个bool?

template<typename functor>
void foo(functor f)
{
    static_assert('functor == bool (int&)', "error message");

    int x = -1;
    if (f(x))
        std::cout << x << std::endl;
}

bool bar(int& x)
{
    x = 4711;
    return true;
}

struct other
{
    bool operator()(int& x)
    {
        x = 815;
        return true;
    }
};

最佳答案 在我看来,你真的不想检查一个仿函数的签名,你想限制用户可以传入的内容,首先:

如果你有权访问std :: function,你可以这样做:

void foo(const std::function<bool(int&)>& f)
点赞