首页 > 解决方案 > 如何创建调用特定函数的函数对象

问题描述

假设我有一个接受任意函数对象作为参数的函数模板:

template<typename F>
// func is a function object
void do_something(F func) {
    // Do something with func
}

我还有一个普通的功能:

int f(int x) {
    return 2 * x;
}

我想f作为参数传递给do_something. 但是,当我这样做时,它会do_something被实例化,并且对内部的F = int (*)(int)调用会通过函数指针导致运行时间接。我想要的是专门实例化 call ,而不是任何具有相同签名的函数。我可以使用 lambda 表达式来实现这一点:funcdo_somethingdo_somethingf

do_something([](int x) -> int { return f(x); });

在这种情况下,do_something将被实例化为F一个新的闭包类型,并且在运行时不会发生指针间接。但是这段代码看起来不太好。有没有更优雅的方法来实现这一点?

标签: c++

解决方案


推荐阅读