【发布时间】:2015-02-24 04:58:44
【问题描述】:
我正在尝试编写一个可与std::function 或 lambda 一起使用的模板函数。让我们假设一个 apply 模板是这样的:
template<typename F>
typename F::result_type apply(const F &f) {
return f();
}
如果我使用 std::function<int()> 调用它,这很好,但如果使用 []() -> int { return 1; } 调用它就不行,因为 lambda 的闭包类型没有 result_type 成员。那么如何编写apply 的返回类型使其正常工作呢?
我目前正在使用 clang 3.5 和 C++14,但无论我得到什么,最好是可移植的——如果有帮助的话,我很乐意切换到更新的编译器。
实际的例子有点复杂。我正在尝试编写类似reduce 的东西,如果第一个参数是可调用的,它将将参数应用于可调用对象,否则它将忽略参数并返回作为第一个参数传递的值。
reduce(0, 1, 2); // returns 0
reduce([](int a, int b) { return a+b; }, 2, 3); // return 5
【问题讨论】:
标签: c++ lambda functional-programming c++14