zoukankan      html  css  js  c++  java
  • C++11 function函数用法

    // C++11 function 
    #include <functional>
    void print_num(int i)
    {
    	std::cout << i << '
    ';
    }
    void testFunctionTpl()
    {
    	// templet 匿名函数
    	std::function<void(const int&, const int&)>getSum = [&](const int &nI1, const int &nI2)
    	{
    		int nSum = nI1 + nI2;
    		std::cout << nSum << endl;
    	};
    	 getSum(8, 9);
    
    	 //  lambda
    	 std::function<void()> f_display_42 = []() { print_num(42); };
    	 f_display_42();
    
    
    	 //********************* 测试成员函数 begin*********************//
    	 class TestClass
    	 {
    	 public:
    		 TestClass(int i) : m_nI(i){}
    		 ~TestClass() {}
    		 void testMemberFunc(int i) const { std::cout << m_nI + i << endl; }
    		 int  testResultFun(int i) const { return m_nI + i; }
    		 void testBindFun(int num) const { std::cout << m_nI + num << endl; }
    		 int m_nI;
    	 };
    
    	 
    	 std::function<void(const TestClass&, int)> testMemberFunc = &TestClass::testMemberFunc;
    	 const TestClass oTestObject(100);
    	 // 传对象
    	 testMemberFunc(oTestObject, 100);
    	 // 会根据模板构造对象
    	 testMemberFunc(300, 100);
    	 //  返回值成员函数
    	 std::function<int(const TestClass&, int)> testResultFun = &TestClass::testResultFun;
    	 int nRet = testResultFun(oTestObject, 100);
    	 std::cout << nRet << endl;
    	 // 成员变量
    	 std::function<int(const TestClass&)> f_num = &TestClass::m_nI;
    	 std::cout << "m_nI: " << f_num(oTestObject) << '
    ';
    
    	 // 对象形式调用成员函数
    	 using std::placeholders::_1; // 占位符 
    	 std::function<void(int)> testBindFun = std::bind(&TestClass::testBindFun, oTestObject, _1);
    	 testBindFun(222);
    
    	 // 指针形式调用成员函数
    	 std::function<void(int)> testBindFun2 = std::bind(&TestClass::testBindFun, &oTestObject, _1);
    	 testBindFun2(333);
    	 //********************* 测试成员函数 end*********************//
    
    	 //********************* 测试普通函数 begin*********************//
    
    	 // 绑定普通函数
    	 std::function<void()> f_display_31337 = std::bind(print_num, 31337);
    	 f_display_31337();
    	 //********************* 测试普通函数 end*********************//
    
    	 // bad_function_call
    	 std::function<int()> f = nullptr;
    	 try {
    		 f();
    	 }
    	 catch (const std::bad_function_call& e) {
    		 std::cout << e.what() << '
    ';
    	 }
    	 
    }
    int main() 
    {
    	testFunctionTpl();
    	int i = 0;
    }
    
  • 相关阅读:
    新购服务器流程
    nginx代理证书使用方法
    一键部署lnmp脚本
    mysql主从库配置读写分离以及备份
    Linux入门教程(更新完毕)
    Git 工作流程
    Git远程操作
    常用Git命令
    js数组去重
    Sublime Text设置快捷键让html文件在浏览器打开
  • 原文地址:https://www.cnblogs.com/xzlq/p/9505049.html
Copyright © 2011-2022 走看看