如何创建调用特定功能的功能对象

时间:2018-11-16 17:58:52

标签: c++

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

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_somethingF = int (*)(int)实例化,并且在func内部对do_something的调用导致通过函数指针进行运行时间接访问。我想要的是专门实例化do_something来调用f,而不是实例化具有相同签名的函数。我可以使用lambda表达式来实现:

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

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

0 个答案:

没有答案