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_Send() OLED_InitView() main() MyRadioRxDoneProcess() PlatformInit() 工程模板操作和关键接口函数解析 ...
注意:函数模板maxMin中要处理二维数组A的m行n列的诸元素,但设计第一参数传递过来的是Type*类型的首元素指针,所以具体处理时可以按照如下的“一维数组”方式来进行(共处理m乘以n个数据 -- 也即二维数组A的m行n列...
QSharedPointer类模板对于模板参数 类模板对于模板参数T的类型重定义 的类型重定义 template <class T> class QSharedPointer { typedef T *QSharedPointer:: *RestrictedBool; typedef QtSharedPointer::...
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 成员...
GetMessagePos 取得消息队列中上一条消息处理完毕时的鼠标指针屏幕位置 GetMessageTime 取得消息队列中上一条消息处理完毕时的时间 PostMessage 将一条消息投递到指定窗口的消息队列 PostThreadMessage 将一条...
需要注意的是本DEMO需要提前在Call中声明回调函数的指针,返回值,参数以及它们的类型 2.另外一个tcFunctionTemplate是使用std::function模板和std::bind,支持全局和类成员函数作为回调函数,我在VS2010下编译通过
函数进行参数传递,是在栈空间里为形参分配空间,并将计算各个实参的表达式的值,...根据函数的参数传递的不同,函数调用可以分为函数的值传递调用(传值调用)、函数的指针传递调用(传址调用)和函数的引用传递调用。
C++ 标准库有四种智能指针:auto_ptr,unique_ptr,shared_ptr,weak_ptr(auto_ptr 是 C++98 标准的,其余都是 C++11 标准推出的,auto_ptr 现在已经不再使⽤了),C++11 这三种智能指针都是类模板。 ⼆ ⼆. ...
第二部分详细介绍了C++本身的特性,如类和对象、构造函数、析构函数和模板等;第三部分描述了标准函数库;第四部分讨论了标准类库,包括STL(标准模板库);第五部分显示了两个应用C++和面向对象编程的实际例子。 本书...
智能指针 智能指针shared_ptr的初始化 的初始化 shared_ptr是智能指针,是模板,头⽂件是memory: shared_ptr<string> p1 最安全的使⽤⽅法是调⽤make_shared标准库函数,此函数在动态内存中分配⼀个对象并初始化它...
6.5.1 用函数指针变量调用函数 6.5.2 用指向函数的指针作函数参数 6.6 返回指针值的函数 6.7 指针数组和指向指针的指针 6.7.1 指针数组的概念 6.7.2 指向指针的指针 6.8 有关指针的数据类型和指针运算的小结 6.8.1 ...
6.5.1 用函数指针变量调用函数 6.5.2 用指向函数的指针作函数参数 6.6 返回指针值的函数 6.7 指针数组和指向指针的指针 6.7.1 指针数组的概念 6.7.2 指向指针的指针 6.8 有关指针的数据类型和指针运算的小结 6.8.1 ...
问:DLL中的模板成员函数? 79 问:CFormView中的上下文帮助? 80 问:CArchive类的WriteObject函数问题? 80 问:RegisterWindowMessage中的BroadcastSystemMessage如何处理? 80 问:CListCtrl中选择变化时如何获得...
base 待排序的数组,melem 数组的元素个数,width 每个元素的大小, fcmp 用于对数组元素进行比较的函数指针,该函数由自己另外编写,有2个参数. <br>所属文件: <stdlib.h><br> <br>
自己完成的,简易的C到Lua简易封装库,取名LuaMe,利用了C++模板,只支持C语言的函数和结构体的封装。支持指针形式的数组访问,支持结构体封装,支持以结构体指针形式作为参数和返回值。支持一级指针。理论上支持多级...
OnDraw(): 这个函数有一个指向CDC类的指针参数, 通过它可能直接调用CDC类上显示数据和图形. 在应用程序窗口出现在及大小发生变化时, 系统将自动调用OnDraw函数 OnInitialUpdate(): 作一些初始化工作. 程序员的...
0036 函数指针数组的应用 13 0037 函数重载的注意事项 14 0038 使用typename关键字 14 1.4 引用 14 0039 使函数返回多个值 14 0040 如何使用引用 15 0041 如何应用值传递参数 15 0042 赋值与初始化的...
例如,当⽤⼀个 shared_ptr 初始化另⼀个 shred_ptr,或将它当做参数传递给⼀个函数以及作为函数的返回值时,它所关联的计数 器就会递增。当我们给 shared_ptr 赋予⼀个新值或是 shared_ptr 被销毁(例如⼀个局部的...