zoukankan      html  css  js  c++  java
  • c++ lambda函数的真实面目

    #include <functional>
    #include <iostream>
    //基础函数
    void printInfo(int a, int b, int c) {
    			std::cout << " a " << a << " b " << b << " c " << c << std::endl;
    }
    
    //操作符重载函数
    struct Print {
    	void operator() (int a, int b, int c) const {
    			std::cout << " a " << a << " b " << b << " c " << c << std::endl;
    	}
    };
    //模板函数
    template<typename T1, typename T2, typename T3>
    void templatePrint(T1 a, T2 b, T3 c) {
    			std::cout << " a " << a << " b " << b << " c " << c << std::endl;
    }
    
    //操作符重载 + 模板 的函数
    struct TemplatePrint {
    	template<typename T1, typename T2, typename T3>
    		void operator() (T1 a, T2 b, T3 c) const {
    			std::cout << " a " << a << " b " << b << " c " << c << std::endl;
    	}
    };
    
    inline void print(int a, int b, int c) {
    	std::cout << " a " << a << " b " << b << " c " << c << std::endl;
    }
    template<typename Fun>
    void printUseFun(Fun fun, int a, int b, int c) {
    	fun(a, b, c);
    }
    void test_1() {
    	Print printUseClass;	
    	TemplatePrint printUseTempClass;
    
    	printInfo(1, 2, 3);
    	printUseClass(1, 2, 3); //operator() (int a, int b, int c)
    
    	templatePrint(1, 2, 3); 
    	printUseTempClass(1, 2, 3);
    	print(1, 2, 3);
    
    	//以前inline 函数跟普通函数调用差不多
    	//lambda就是个inline函数, 只是把 inline 函数作为一个参数或者一个local变量来使用, 
    
    	std::cout << "lamda: " << std::endl;
    	auto local = [](int a, int b, int c) {
    		std::cout << " a " << a << " b " << b << " c " << c << std::endl;
    	};
    	printUseFun(local, 1, 2, 3);
    	printUseFun([](int a, int b, int c) {
    		std::cout << "lamda2:" << std::endl;	
    		std::cout << " a = " << a << " b = " << b << " c = " << c << std::endl;
    	}, 2, 3, 5);
    
    	int a = 6, b = 7, c = 8;
    
    	auto local2  = [a, b, c]() {
    		std::cout << " a = " << a << " b = " << b << " c = " << c << std::endl;
    	};
    	local2();
    
    	auto local3 = [=]() {
    		std::cout << "====" << std::endl;
    		std::cout << " a = " << a << " b = " << b << " c = " << c << std::endl;
    	};
    	local3();
    
    	auto local4 = [=]() mutable {
    		std::cout << "====" << std::endl;
    		a = 4, b = 4 , c = 4;
    		std::cout << " a = " << a << " b = " << b << " c = " << c << std::endl;
    	};
    	local4();
    	
    }
    int main(void) {
    	test_1();
    	return 0;
    }
    
    
  • 相关阅读:
    Ubuntu12.04安装svn1.8
    [NOIP模拟测试3] 建造游乐园 题解(欧拉图性质)
    图论模板
    [bzoj3073] Journeys 题解(线段树优化建图)
    [bzoj3033]太鼓达人 题解(搜索)
    [NOIP2016]天天爱跑步 题解(树上差分) (码长短跑的快)
    [HNOI2015]菜肴制作 题解(贪心+拓扑)
    [SDOI2015]排序 题解 (搜索)
    [CQOI2011]放棋子 题解(dp+组合数学)
    [ZJOI2011]看电影(组合数学/打表+高精)
  • 原文地址:https://www.cnblogs.com/lyxf/p/12358338.html
Copyright © 2011-2022 走看看