C++11新特性(54)- function类模版
函数指针是C语言中算是比较困难的内容之一,C语言实现的高级功能很多都离不开函数指针构成的列表。进入C++之后首先是引入了函数对象,接着C++11又引入了lamda表达式和参数绑定。
上述4种技术有一个共同的特征,即都可以对其使用调用运算符,C++称之为可调用对象。可调用对象虽然有着共同的调用模式,但是却分别属于完全不同的类型。如果需要组织一个可调用对象的列表(或其他数据结构),就需要一种共通的观点--function类模版。
可执行对象
假设我们有以下的四则运算操作,分别以函数,lamda表达式,函数对象和参数绑定的方式实现:
function类模版
代码首先是function<int(int,int)>定义了返回值为int,参数为两个int的可调用对象类型,然后定义了从string到该类型的映射。
接下来就是初始化映射和使用映射了。
在本例中可以看到:虽然每个操作的类型并不相同,但是由于它们拥有相同的调用形式,通过引入function类模版,可以像同一种类型一样使用它们。
作者观点
这可算是C++中模版的强大实力的牛刀小试吧。
觉得本文有帮助?请分享给更多人。
阅读更多更新文章,请扫描下面二维码,关注微信公众号【面向对象思考】