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)
分享到:
相关推荐
在实际编程中,理解函数指针的这些概念至关重要,因为它们是许多高级C++技术的基础,如回调、事件处理和模板元编程。`函数指针.cpp`、`StdAfx.cpp`、`函数指针.dsp`、`函数指针.dsw`和`StdAfx.h`等文件可能包含示例...
// 定义一个返回整型的无参数函数指针类型 typedef int (*func_ptr)(); // 声明并初始化函数指针变量 func_ptr ptr = myFunction; ``` 在这里,`myFunction`是符合函数指针类型`func_ptr`的函数。通过`ptr`,我们...
函数指针则是指向函数的变量,可以用来作为参数传递或者存储函数的地址,以便在需要时调用。在这份"易语言简单类函数指针源码"中,我们可以探讨易语言如何实现类和函数指针的交互。 首先,我们需要理解易语言中的类...
普通函数指针是C++中一种基础的数据类型,可以存储任何无参数或具有特定参数类型的函数的地址。例如,如果我们有一个返回类型为int,参数类型为int的函数`int add(int a, int b)`,我们可以定义一个对应的函数指针...
在C++编程中,函数指针是一个非常强大的工具,它允许我们将函数作为其他函数的参数或者存储在变量中。在本示例中,“函数指针万能打印”着重讲解如何利用函数指针实现一个通用的打印系统,可以适应各种数据类型的...
- **类型安全**:通过模板参数约束确保委托的类型安全,避免运行时错误。 - **缓存结果**:对于计算密集型的任务,可以考虑缓存结果以减少重复计算。 #### 结论 通过成员函数指针,C++能够实现类似于其他面向对象...
在C++中,函数指针同样可以使用,但多被重载函数、虚函数和模板函数等机制所覆盖。 函数指针的一个典型应用就是实现事件驱动编程,比如在图形用户界面(GUI)编程中。在这种情况下,将函数指针赋值给控件的事件处理...
C++中的成员函数指针是一种特殊的指针类型,它可以指向类的成员函数。在C++中,函数本身不是对象,因此不能直接赋值给普通指针。但是,成员函数指针允许我们存储对特定对象成员函数的引用,以便稍后调用。这种机制在...
在上述代码中,`CmdParaParser` 类的实例处理命令行参数,并且使用成员函数指针来解析特定参数。下面我们将详细探讨如何使用成员函数指针以及在给定的代码片段中它们是如何应用的。 首先,成员函数指针的声明和使用...
函数指针在实现回调机制、动态调度、多态行为等方面具有重要作用,尤其是在旧版C++中,没有现代C++中的模板和STL时,它们是实现复杂逻辑的关键工具。理解并熟练掌握函数指针的使用,对于深入理解和编写高效的C++代码...
此外,指针函数与函数指针数组结合使用,还可以实现类似策略模式的设计,允许在运行时动态选择执行的算法。 总之,理解和熟练掌握指针函数作为参数传递的能力是成为一名优秀的C/C++程序员的关键步骤之一。它不仅...
C++标准库中有很多使用函数指针的例子,如`qsort()`排序函数就需要一个比较函数指针作为参数。 8. **C++11之后的改进**: 自C++11起,引入了lambda表达式,它提供了一种更简洁、更安全的方式来创建匿名函数对象,...
函数型指针可以用于实现函数式编程,例如将函数作为参数传递给其他函数,或者将函数作为返回值返回给其他函数。函数型指针也可以用于实现Callback机制,例如在事件驱动编程中,函数型指针可以用于注册事件处理器。 ...
函数指针的声明通常包含函数的返回类型和参数类型。例如,如果有一个接受两个整数并返回整数的函数`int add(int a, int b)`,它的函数指针类型可以写作`int (*)(int, int)`。声明一个函数指针变量,然后将其赋值为...
5. **使用了不兼容的函数指针类型**:在某些情况下,如果函数指针是从模板或类成员函数派生的,它们可能具有特殊的类型,不能直接赋值给普通的函数指针。 6. **链接错误**:在某些情况下,尽管编译成功,但在链接...
在C++编程语言中,函数指针和模板是两个非常重要的概念,它们分别提供了不同的功能增强和代码复用机制。让我们深入探讨这两个主题,并通过源码分析来理解它们的应用。 首先,函数指针允许我们将函数作为其他函数的...
- 模板方法设计模式:函数指针可以实现基本框架中的可变部分。 6. **总结** 函数指针是C语言的一大特色,它提供了强大的功能,允许我们以更灵活的方式编写程序。通过理解函数指针的工作原理和用法,可以写出更...
- 宏和模板元编程:函数指针可以与宏和模板元编程结合,生成更复杂的代码结构。 总结,C++中的函数指针和回调函数是强大的工具,它们提供了对程序流程的动态控制和高度的灵活性。理解和熟练掌握这些概念对于编写...
同时,需要注意的是,由于C++支持模板和STL,现代C++倾向于使用函数对象(functors)和lambda表达式来代替原始的函数指针,因为它们提供了更强的类型安全性和更简洁的语法。不过,理解函数指针和回调函数的基础对于...
这个函数模板接受一个数组指针和数组长度,通过模板参数`T`,它可以对`int`和`double`类型的数组进行排序。在主函数`main`中,我们分别对整型和双精度浮点型数组调用了`sort`函数,展示了函数模板的实例化过程,即...