注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

还东国的博客

行之苟有恒,久久自芬芳

 
 
 

日志

 
 

C++11及BOOST特性之十二对std::function模板类的一些认识  

2014-05-09 08:54:03|  分类: C++(VC)编程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

C++11BOOST特性之十二对std::function模板类的一些认识

晚上看别人的代码,发现了一个问题,看一下他的代码:

class TestFun

{

public:

         //从目前来看,这里声明成什么都可以。

         void append(std::function< void(std::string,int) > func)

         {

                   func("100",2);

         }

};

struct MyPair {

         double a, b;

         double multiply()

         {

                   return a*b;

         }

 

         void multiplyn(int k,int t)

         {

                   double c = a*b;

         }

};

再看应用:

         MyPair p; TestFun tf;

         tf.append(std::bind(&MyPair::multiplyn, &p,10,20));

明显的声明和实现的函数的参数不同,但是编译器直接就编译过去了,然后运行也没有问题,只是传递过去的参数只是绑定时的参数。但是如果你使用占位符而不是显示的指定参数即在:

tf.append(std::bind(&MyPair::multiplyn, &p,10,20));改成

tf.append(std::bind(&MyPair::multiplyn, &p, std::placeholders::_1,20));

那么编译就会报错误。可是再改一下:

void append(std::function< void(std::string,int) > func)

改成:void append(std::function< void(double,int) > func)

则又可以编译过去,C/C++的默认转换,一定是。太可怕了。

经过反复的查找资料,觉得可以这个类模板仍然类似于函数指针,并且只是一个指针,在对于自身当做一个函数参数传递时,并不会进行太强的检查。目前只是这样,如果有什么错误,欢迎指正。

  评论这张
 
阅读(584)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017