VC2010 中,函数指针能指向对象的一个函数吗?

Jonix 2013-02-26 05:15:41
以前的C++标准只能指向一个静态函数,或非对象函数

现在的 VC2010 中,函数指针能指向对象的一个函数吗?

如果可以的话,请问语法是什么样的。

谢谢。
...全文
365 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jonix 2013-02-28
  • 打赏
  • 举报
回复
呵呵,我知道,以后我也用这个标签。 MS 是最不思进取的公司,什么都是学人家的,慢一大拍。
引用 9 楼 caozhy 的回复:
引用 8 楼 Jonix 的回复:引用 7 楼 caozhy 的回复: (1)可以的 事实上C++中,所谓成员函数,无非就是你看到的那个函数,以及最后有一个这个类型的this指针,本质上和一般的函数没有什么不同 (2)如果你要用闭包,那么最好用支持C++11的编译器(比如VS2012),它支持Lambda表达式,并且允许捕获(Capture)调用者的变量的引用 ……
threenewbee 2013-02-28
  • 打赏
  • 举报
回复
引用 8 楼 Jonix 的回复:
引用 7 楼 caozhy 的回复: (1)可以的 事实上C++中,所谓成员函数,无非就是你看到的那个函数,以及最后有一个这个类型的this指针,本质上和一般的函数没有什么不同 (2)如果你要用闭包,那么最好用支持C++11的编译器(比如VS2012),它支持Lambda表达式,并且允许捕获(Capture)调用者的变量的引用 C/C++ code?123456string name;……
论坛里面时不时有人问怎么把一个BCB写的程序移植到VC上,这时候他们发现那些有非标准特性的编译器原来还有个标签叫“卧槽”!
Jonix 2013-02-28
  • 打赏
  • 举报
回复
引用 7 楼 caozhy 的回复:
(1)可以的 事实上C++中,所谓成员函数,无非就是你看到的那个函数,以及最后有一个这个类型的this指针,本质上和一般的函数没有什么不同 (2)如果你要用闭包,那么最好用支持C++11的编译器(比如VS2012),它支持Lambda表达式,并且允许捕获(Capture)调用者的变量的引用 C/C++ code?123456string name;cin>> n……
只有VC2012才支持吗? TMD,BCB十五前年就支持了,这破MS。 算了,那暂时放弃,我现在用的 Qt5 , 它是VC2010 下的。
threenewbee 2013-02-28
  • 打赏
  • 举报
回复
(1)可以的 事实上C++中,所谓成员函数,无非就是你看到的那个函数,以及最后有一个这个类型的this指针,本质上和一般的函数没有什么不同 (2)如果你要用闭包,那么最好用支持C++11的编译器(比如VS2012),它支持Lambda表达式,并且允许捕获(Capture)调用者的变量的引用
string name;
cin>> name;
return global_address_book.findMatchingAddresses( 
    // notice that the lambda function uses the the variable 'name'
    [&] (const string& addr) { return addr.find( name ) != string::npos; } 
);
ref: http://www.cprogramming.com/c++11/c++11-lambda-closures.html
Jonix 2013-02-28
  • 打赏
  • 举报
回复
这种用法我以前用过,但我现在的要求是不能指定类名: pFunc p = &Test::Add ; 就是闭包,不过不知道VC2010支不支持,好象说2012支持的。
引用 4 楼 gxingmin 的回复:
引用 3 楼 Jonix 的回复:引用 1 楼 gxingmin 的回复:谁说以前只能指向静态函数,或非对象函数? 好好看看C++标准。 引用 2 楼 hdt 的回复:#include <iostream> using namespace std; class Testpm { public: void m_func1() { cout ……
Jonix 2013-02-27
  • 打赏
  • 举报
回复
引用 1 楼 gxingmin 的回复:
谁说以前只能指向静态函数,或非对象函数?
好好看看C++标准。
引用 2 楼 hdt 的回复:
#include <iostream> using namespace std; class Testpm { public: void m_func1() { cout << "m_func1\n"; } int m_num; }; // Define derived types pmfn and pmd. // These ty……
我实际上想问的问题是:闭包
zhanglong19891129 2013-02-27
  • 打赏
  • 举报
回复
求楼上这位小哥帮我解惑下 http://bbs.csdn.net/topics/390377777的第3个问题
gxingmin 2013-02-27
  • 打赏
  • 举报
回复
引用 3 楼 Jonix 的回复:
引用 1 楼 gxingmin 的回复:谁说以前只能指向静态函数,或非对象函数? 好好看看C++标准。 引用 2 楼 hdt 的回复:#include <iostream> using namespace std; class Testpm { public: void m_func1() { cout << "m_func1\n"; }……
让哥告诉你c++里怎么用对象函数指针

class Test  //这是一个类
{
public:
	int Add(int i,int j){return i+j;};  //这是非静态函数
};

typedef int (Test::*pFunc )(int,int) ;
int main()
{
    Test t; //对象
    pFunc p = &Test::Add ;
 
    int res= (t.*p)(1,2);//测试
     //res结果为3
    return 0;
}

真相重于对错 2013-02-26
  • 打赏
  • 举报
回复
#include <iostream> using namespace std; class Testpm { public: void m_func1() { cout << "m_func1\n"; } int m_num; }; // Define derived types pmfn and pmd. // These types are pointers to members m_func1() and // m_num, respectively. void (Testpm::*pmfn)() = &Testpm::m_func1; int Testpm::*pmd = &Testpm::m_num; int main() { Testpm ATestpm; Testpm *pTestpm = new Testpm; // Access the member function (ATestpm.*pmfn)(); (pTestpm->*pmfn)(); // Parentheses required since * binds // less tightly than the function call. // Access the member data ATestpm.*pmd = 1; pTestpm->*pmd = 2; cout << ATestpm.*pmd << endl << pTestpm->*pmd << endl; delete pTestpm; }
gxingmin 2013-02-26
  • 打赏
  • 举报
回复
谁说以前只能指向静态函数,或非对象函数?

7,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 VC.NET
社区管理员
  • VC.NET社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧