lambda – 如何在C 0x中重载运算符以组合函数?

前端之家收集整理的这篇文章主要介绍了lambda – 如何在C 0x中重载运算符以组合函数?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有没有办法超载,比如>>运算符的功能组合?运算符应该在lambda和std :: function上无缝地工作?

要求:

>解决方案不应包含嵌套绑定调用,
>左操作数可以是具有任意数量参数的函数类型,和
>不应创建多个函数对象实例.

这是一个快速而肮脏的示例,说明了所需的行为:

#include <iostream>
#include <functional>

using namespace std;

// An example of a quick and dirty function composition.
// Note that instead of 'std::function' this operator should accept
// any functional/callable type (just like 'bind').
template<typename R1,typename R2,typename... ArgTypes1>
function<R2(ArgTypes1...)> operator >> (
                const function<R1(ArgTypes1...)>& f1,const function<R2(R1)>& f2) {
    return [=](ArgTypes1... args){ return f2(f1(args...)); };
}

int main(int argc,char **args) {
    auto l1 = [](int i,int j) {return i + j;};
    auto l2 = [](int i) {return i * i;};

    function<int(int,int)> f1 = l1;
    function<int(int)> f2 = l2;

    cout << "Function composition: " << (f1 >> f2)(3,5) << endl;

    // The following is desired,but it doesn't compile as it is:
    cout << "Function composition: " << (l1 >> l2)(3,5) << endl;

    return 0;
}

解决方法

(l1>> l2)永远不会工作.

它们是由编译器生成函数对象,不包含该运算符,因此除非您计划将编译器修改为不符合,否则它将始终如此. 原文链接:https://www.f2er.com/c/110857.html

猜你在找的C&C++相关文章