C++11 function (2017-05-05 第2次修改)
function+bind可以實現按值傳遞函式物件
從而而消滅多型(無需繼承基類即可實現一般意義上的多型)
本質上是物件訊息機制,可以向任何物件傳遞訊息並執行,只需要規定訊息的格式,這個格式就是函式物件的宣告。
本文示例程式碼:參考《C++ Primer 第五版中文版》
思想參考:《Linux 多執行緒服務端程式設計》以及 孟巖的 function/bind的救贖(上)
另見:面向介面程式設計
程式碼:
#include <map>
#include <iostream>
#include <string>
#include <functional>
using namespace std;
int add(int i,int j) { return i+j;}
class divide
{
public:
int operator()(int i,int j){return i/j;}
};
class Big
{
public:
bool bigger_than(int i,int j){return i>j;}
};
int main(int, char *[])
{
int i=10,j=5;
auto mod = [](int i,int j){return i%j;};
typedef function<int(int,int)> fun;
map<string,function<int(int,int)>> binary_operators ;
binary_operators.insert(make_pair<string,fun>("+",add));//函式指標
binary_operators.insert(make_pair<string,fun>("-",std::minus<int>()));//函式物件
binary_operators.insert(make_pair<string,fun>("/",divide()));//使用者定義的函式物件
binary_operators.insert(make_pair<string,fun>("*",[](int i,int j){return i*j;}));//未命名的lambda
binary_operators.insert(make_pair<string,fun>("%",mod));//命了名的lambda
Big big;
fun f = std::bind(&Big::bigger_than,big,i,j);//呼叫big.bigger_than(i,j)
binary_operators.insert(make_pair<string,fun>(">",f));//任意類的成員函式
cout<<i<<"+"<<j<<"="<<binary_operators["+"](i,j)<<endl;
cout<<i<<"-"<<j<<"="<<binary_operators["-"](i,j)<<endl;
cout<<i<<"/"<<j<<"="<<binary_operators["/"](i,j)<<endl;
cout<<i<<"*"<<j<<"="<<binary_operators["*"](i,j)<<endl;
cout<<i<<"%"<<j<<"="<<binary_operators["%"](i,j)<<endl;
cout<<i<<">"<<j<<"="<<binary_operators[">"](i,j)<<endl;
return 0;
};
輸出:
10+5=15
10-5=5
10/5=2
10*5=50
10%5=0
10>5=1
請按任意鍵繼續. . .
相關文章
- C++11 std::bind std::function 高階用法C++Function
- 第3章_auto佔位符(C++11~C++17)C++
- javascript 中function(){},new function(),new Function(),Function 摘錄JavaScriptFunction
- 【C++11】c++11實現執行緒池C++執行緒
- 資料庫字符集修改函式function nls_charset_id_name資料庫函式Function
- C++11 tupleC++
- $(function(){})與(function($){....})(jQuery)的區別FunctionjQuery
- c++11:std::bindC++
- C++11新特性C++
- JavaScript FunctionJavaScriptFunction
- javascript Function()JavaScriptFunction
- sendDataByUdp FunctionUDPFunction
- Substr FunctionFunction
- Function : dumpFunction
- [Bash] functionFunction
- RTX——第8章 任務優先順序修改
- C++11拾穗C++
- c++11:std::is_sameC++
- C++11 智慧指標C++指標
- 「C++11」Lambda 表示式C++
- c++11 :unique_ptrC++
- Pythy syntax for C++11C++
- C++11特性總彙C++
- Javascript 物件導向學習1 Function function ObjectJavaScript物件FunctionObject
- C++11 併發指南七(C++11 記憶體模型一:介紹)C++記憶體模型
- DMSQL WITH FUNCTION子句SQLFunction
- JavaScript Function物件JavaScriptFunction物件
- python FunctionPythonFunction
- Function型別Function型別
- jQuery中$(function(){})jQueryFunction
- js的functionJSFunction
- 函式(FUNCTION)函式Function
- oracle function overviewOracleFunctionView
- 常用Function ModuleFunction
- FUNCTION : vsizeFunction
- System-FunctionFunction
- Oracle Table FunctionOracleFunction
- oracle function powerOracleFunction