C++11 理解 (二十六) 之 多态函数对象包装器
2013-08-26 14:47
309 查看
针对函数对象的多态包装器(又称多态函数对象包装器)在语义和语法上和函数指针相似,但不像函数指针那么狭隘。只要能被调用,且其参数能与包装器兼容的都能以多态函数对象包装器称之(函数指针,成员函数指针或仿函数)。
通过以下例子,我们可以了解多态函数对象包装器的特性:
模板类
通过以下例子,我们可以了解多态函数对象包装器的特性:
std::function<int (int, int)> func; // 利用樣板類 'function' // 建立包裝器 std::plus<int> add; // 'plus' 被宣告為 'template<class T> T plus( T, T ) ;' // 因此 'add' 的型別是 'int add( int x, int y )' func = &add; // 可行。'add' 的型參和回返值型別與 'func' 相符 int a = func (1, 2); // 注意: 若包裝器 'func' 沒有參考到任何函式 // 會丟出 'std::bad_function_call' 例外 std::function<bool (short, short)> func2 ; if(!func2) { // 因為尚未賦值與 'func2' 任何函式,此條件式為真 bool adjacent(long x, long y); func2 = &adjacent ; // 可行。'adjacent' 的型參和回返值型別可透過型別轉換進而與 'func2' 相符 struct Test { bool operator()(short x, short y); }; Test car; func = std::ref(car); // 樣板類 'std::ref' 回傳一個 struct 'car' // 其成員函式 'operator()' 的包裝 } func = func2; // 可行。'func2' 的型參和回返值型別可透過型別轉換進而與 'func' 相符
模板类
function将定义在头文件
<functional>,而不须更动到语言本身。
相关文章推荐
- C++11 理解 之 多态函数对象包装器
- C++11 理解 (二十八) 之 用于计算函数对象返回类型的统一方法
- C++11 理解 (十九) 之 使用或禁用对象的默认函数
- php中引用&的真正理解-变量引用、函数引用、对象引用
- 关于C++中在函数中按值返回、临时对象、拷贝构造函数的一点理解
- C++函数指针、函数对象与C++11 function对象对比分析
- 深入理解javascript(2):函数和对象的关系
- C++11 thread调用对象的成员函数
- php中引用&的真正理解-变量引用、函数引用、对象引用
- C++11系列——函数对象(Function Object)
- 深入理解javascript原型和闭包(2)——函数和对象的关系
- php中引用&的真正理解-变量引用、函数引用、对象引用
- C++函数指针、函数对象与C++11 function对象对比分析
- 深入理解javascript原型和闭包(2)——函数和对象的关系
- 深入理解javascript原型和闭包(2)——函数和对象的关系
- php中引用&的真正理解-变量引用、函数引用、对象引用
- C++11之使用或禁用对象的默认函数
- C++11用于计算函数对象返回类型的统一方法
- java中对象多态时成员变量,普通成员函数及静态成员函数的调用情况
- 深入理解javascript原型和闭包(2)--函数和对象的关系