一个基础小问题

TOO_MANY 2015-01-13 04:47:13


// 这是一个测试类,没意义
class CTest
{
public:
CTest(){}
~CTest(){}

public:
int Output( char * szBuf )
{
std::cout<<szBuf<<std::endl;
return 0;
}
};

typedef int (CTest::*TestFunc)(char * szBuf );
std::vector<TestFunc> m_vtTest;

int main()
{
CTest test;
m_vtTest.push_back( &CTest::Output );

m_vtTest[0]("test"); // 这里编译有错误,说表达式必须具有(pointer-to-) 的函数类型
}

大神告诉我可以这么用:

(test.*m_vtTest[0])("test");

确实,但是有个问题:m_vtTest在定义、push_back 的时候,并没有创建CTest对象,该怎么用 m_vtTest 去掉用函数呢?

为什么 m_vtTest[0]("test"); 不能用呢?
...全文
501 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lincolnandlinda 2015-01-15
  • 打赏
  • 举报
回复
可以这么写

zagnyu 2015-01-15
  • 打赏
  • 举报
回复
引用 5 楼 bear234 的回复:
据说c++11的lambda可以做到无对象回调函数?
那貌似也不是成员函数吧!
lincolnandlinda 2015-01-15
  • 打赏
  • 举报
回复

#include <functional>
#include <iostream>
#include <vector>
using namespace std;
int main()
{
	CTest obj;
	vector<function<int(char*)>> v;
	v.push_back(bind(&CTest::Output, &obj, placeholders::_1));
	auto f = v[0];
	char * s = "abc";
	f(s);
}
动力风暴 2015-01-14
  • 打赏
  • 举报
回复
请教楼主:楼主能不能解释一下这句是什么意思???
typedef int (CTest::*TestFunc)(char * szBuf );
bear234 2015-01-14
  • 打赏
  • 举报
回复
据说c++11的lambda可以做到无对象回调函数?
野男孩 2015-01-13
  • 打赏
  • 举报
回复
调用成员函数,必然是调用某个对象的成员函数。因为这个成员函数默认有个this指针,指向一个对象。 没有对象的话,这个成员函数内部对成员变量的读和写到底是针对的哪个对象??所以必须有明确的对象来调用成员函数
mujiok2003 2015-01-13
  • 打赏
  • 举报
回复
成员函数指针必须由对象调用, 没有什么道理可讲。
ll3826982 2015-01-13
  • 打赏
  • 举报
回复
你直接用成员函数,没有对象怎么用?这是最基本c++类原则。
ll3826982 2015-01-13
  • 打赏
  • 举报
回复
这是.*操作符的使用啊。

64,701

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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