C++11新特性(54)- function类模版

函数指针是C语言中算是比较困难的内容之一,C语言实现的高级功能很多都离不开函数指针构成的列表。进入C++之后首先是引入了函数对象,接着C++11又引入了lamda表达式和参数绑定。

 

上述4种技术有一个共同的特征,即都可以对其使用调用运算符,C++称之为可调用对象。可调用对象虽然有着共同的调用模式,但是却分别属于完全不同的类型。如果需要组织一个可调用对象的列表(或其他数据结构),就需要一种共通的观点--function类模版。

 

可执行对象

 

假设我们有以下的四则运算操作,分别以函数,lamda表达式,函数对象和参数绑定的方式实现:

C++11新特性(54)- function类模版

C++11新特性(54)- function类模版

function类模版

C++11新特性(54)- function类模版

C++11新特性(54)- function类模版

代码首先是function<int(int,int)>定义了返回值为int,参数为两个int的可调用对象类型,然后定义了从string到该类型的映射。

 

接下来就是初始化映射和使用映射了。

 

在本例中可以看到:虽然每个操作的类型并不相同,但是由于它们拥有相同的调用形式,通过引入function类模版,可以像同一种类型一样使用它们。

 

作者观点

 

这可算是C++中模版的强大实力的牛刀小试吧。

 

 

觉得本文有帮助?请分享给更多人。

阅读更多更新文章,请扫描下面二维码,关注微信公众号【面向对象思考】

C++11新特性(54)- function类模版