`
chenqi210
  • 浏览: 76689 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

模板参数 函数指针

    博客分类:
  • c++
 
阅读更多
http://stackoverflow.com/questions/5507377/template-type-deduction-for-a-pointer-to-member-function 写道


For a.connect<double> (&GApp::foo), both the foo(double) and foo(double, double) will match the overload of connect with one, and with two template parameters respectively (in the case of the two parameter version, the second template argument will be deduced, the first argument was provided by you explicitly).

If you want to disambiguate ambiguous cases, I recommend that you pass the exact type, so no surprises can happen. Instead of those overloads, why not have a single overload

template<typename MType, typename T>
void connect(MType T::*f)
{
//Do some stuff
}

a.connect<void()> (&GApp::foo);
a.connect<void(double)> (&GApp::foo);
a.connect<void(double, double)> (&GApp::foo);

 

猜测MType为函数类型,而f是T内的一个函数指针。并写了这个函数来测试

 

template<typename FunctionType,typename T,typename Type>
MethodWrapper<FunctionType T::*,Type>
methodwrap(FunctionType T::* fp,Type *pObj)
{
	return MethodWrapper<FunctionType T::*,Type>(fp,pObj);
}

 

template<typename MType,typename T>
void memfn(MType (T::*f))
{
	cout << typeid(f).name() << endl;
}

 

写的这个memfn可以从&Test::display中同时推导出函数类型 MType和所属类型T

vs2010,

gcc 4.5.2 (没有启用 -std=c++0x)

 

 

分享到:
评论

相关推荐

    LoRa温湿度传感器节点应用程序开发:工程模板操作和关键接口函数解析.pptx

    工程模板操作和关键接口函数解析 应用程序编程 程序烧写 工程模板操作和关键接口函数解析 LoRa_Send() OLED_InitView() main() MyRadioRxDoneProcess() PlatformInit() 工程模板操作和关键接口函数解析 ...

    编写一个在具有m行n列的二维数组各元素中找出最大元和最小元并显示在屏幕上的函数模板,并通过主函数对它进行调用以验证其正确性。例如,可设计该函数模板的原型为:

    注意:函数模板maxMin中要处理二维数组A的m行n列的诸元素,但设计第一参数传递过来的是Type*类型的首元素指针,所以具体处理时可以按照如下的“一维数组”方式来进行(共处理m乘以n个数据 -- 也即二维数组A的m行n列...

    Qt源码剖析-智能指针.pdf

    QSharedPointer类模板对于模板参数 类模板对于模板参数T的类型重定义 的类型重定义 template &lt;class T&gt; class QSharedPointer { typedef T *QSharedPointer:: *RestrictedBool; typedef QtSharedPointer::...

    C++和面向对象数值计算

    7.7.2 函数指针作为模板参数 7.7.3 使用点积和模板表达式 7.7.4 采用点积和模板元程序 7.8 多项式插值 7.8.1 拉格朗日形式 7.8.2 牛顿形式 7.9 练习 第8章 类的继承 8.1 派生类 8.1.1 成员...

    API之网络函数---整理网络函数及功能

    GetMessagePos 取得消息队列中上一条消息处理完毕时的鼠标指针屏幕位置 GetMessageTime 取得消息队列中上一条消息处理完毕时的时间 PostMessage 将一条消息投递到指定窗口的消息队列 PostThreadMessage 将一条...

    C++回调函数的2个DEMO程序,整理修改by唐太咸

    需要注意的是本DEMO需要提前在Call中声明回调函数的指针,返回值,参数以及它们的类型 2.另外一个tcFunctionTemplate是使用std::function模板和std::bind,支持全局和类成员函数作为回调函数,我在VS2010下编译通过

    C++参数传递与作用域

    函数进行参数传递,是在栈空间里为形参分配空间,并将计算各个实参的表达式的值,...根据函数的参数传递的不同,函数调用可以分为函数的值传递调用(传值调用)、函数的指针传递调用(传址调用)和函数的引用传递调用。

    C++智能指针.pdf

    C++ 标准库有四种智能指针:auto_ptr,unique_ptr,shared_ptr,weak_ptr(auto_ptr 是 C++98 标准的,其余都是 C++11 标准推出的,auto_ptr 现在已经不再使⽤了),C++11 这三种智能指针都是类模板。 ⼆ ⼆. ...

    -C++参考大全(第四版) (2010 年度畅销榜

    第二部分详细介绍了C++本身的特性,如类和对象、构造函数、析构函数和模板等;第三部分描述了标准函数库;第四部分讨论了标准类库,包括STL(标准模板库);第五部分显示了两个应用C++和面向对象编程的实际例子。 本书...

    智能指针shared-ptr的初始化.pdf

    智能指针 智能指针shared_ptr的初始化 的初始化 shared_ptr是智能指针,是模板,头⽂件是memory: shared_ptr&lt;string&gt; p1 最安全的使⽤⽅法是调⽤make_shared标准库函数,此函数在动态内存中分配⼀个对象并初始化它...

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar

    6.5.1 用函数指针变量调用函数 6.5.2 用指向函数的指针作函数参数 6.6 返回指针值的函数 6.7 指针数组和指向指针的指针 6.7.1 指针数组的概念 6.7.2 指向指针的指针 6.8 有关指针的数据类型和指针运算的小结 6.8.1 ...

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar )

    6.5.1 用函数指针变量调用函数 6.5.2 用指向函数的指针作函数参数 6.6 返回指针值的函数 6.7 指针数组和指向指针的指针 6.7.1 指针数组的概念 6.7.2 指向指针的指针 6.8 有关指针的数据类型和指针运算的小结 6.8.1 ...

    VC++常用的共用函数100多页

    问:DLL中的模板成员函数? 79 问:CFormView中的上下文帮助? 80 问:CArchive类的WriteObject函数问题? 80 问:RegisterWindowMessage中的BroadcastSystemMessage如何处理? 80 问:CListCtrl中选择变化时如何获得...

    qsort

    base 待排序的数组,melem 数组的元素个数,width 每个元素的大小, fcmp 用于对数组元素进行比较的函数指针,该函数由自己另外编写,有2个参数. &lt;br&gt;所属文件: &lt;stdlib.h&gt;&lt;br&gt; &lt;br&gt;

    利用C++模板的C到Lua简易封装库

    自己完成的,简易的C到Lua简易封装库,取名LuaMe,利用了C++模板,只支持C语言的函数和结构体的封装。支持指针形式的数组访问,支持结构体封装,支持以结构体指针形式作为参数和返回值。支持一级指针。理论上支持多级...

    MFC常用的类及其成员函数简介

    OnDraw(): 这个函数有一个指向CDC类的指针参数, 通过它可能直接调用CDC类上显示数据和图形. 在应用程序窗口出现在及大小发生变化时, 系统将自动调用OnDraw函数 OnInitialUpdate(): 作一些初始化工作. 程序员的...

    Visual C++开发经验技巧宝典(第1章)

    0036 函数指针数组的应用 13 0037 函数重载的注意事项 14 0038 使用typename关键字 14 1.4 引用 14 0039 使函数返回多个值 14 0040 如何使用引用 15 0041 如何应用值传递参数 15 0042 赋值与初始化的...

    C++智能指针shared-ptr讲解与使用.pdf

    例如,当⽤⼀个 shared_ptr 初始化另⼀个 shred_ptr,或将它当做参数传递给⼀个函数以及作为函数的返回值时,它所关联的计数 器就会递增。当我们给 shared_ptr 赋予⼀个新值或是 shared_ptr 被销毁(例如⼀个局部的...

Global site tag (gtag.js) - Google Analytics