首页 > 解决方案 > 以带有重载()的函数/lambda/类作为参数的函数

问题描述

我需要编写一个函数,该函数可以将另一个函数/lambda/类与 () 运算符重载为参数并正确使用它们(如 std::sort 的第 3 个参数。它在 C++ 语法方面是什么样的?

标签: c++functioncomparatorfunctor

解决方案


您可以将其设置为std::sort带有模板参数的函数模板(如 ),您认为该模板参数是可调用的:

template<typename Func>
void myFunction(Func f)
{
    f();
}

现在让我们测试一下:

void normalFunction()
{
    std::cout << "Normal function.\n";
}

struct Functor {
    void operator()()
    {
        std::cout << "Functor object.\n";
    }
};

int main()
{
    Functor functor;

    myFunction(normalFunction);
    myFunction(functor);
    myFunction([]{ std::cout << "Lambda.\n"; });
}

这将打印:

正常功能。
函子对象。
拉姆达。

推荐阅读