// 这是一个测试类,没意义
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"); 不能用呢?
9 个解决方案
#1
这是.*操作符的使用啊。
#2
你直接用成员函数,没有对象怎么用?这是最基本c++类原则。
#3
成员函数指针必须由对象调用, 没有什么道理可讲。
#4
调用成员函数,必然是调用某个对象的成员函数。因为这个成员函数默认有个this指针,指向一个对象。
没有对象的话,这个成员函数内部对成员变量的读和写到底是针对的哪个对象??所以必须有明确的对象来调用成员函数
没有对象的话,这个成员函数内部对成员变量的读和写到底是针对的哪个对象??所以必须有明确的对象来调用成员函数
#5
据说c++11的lambda可以做到无对象回调函数?
#6
请教楼主:楼主能不能解释一下这句是什么意思???
typedef int (CTest::*TestFunc)(char * szBuf );
#7
那貌似也不是成员函数吧!
#8
可以这么写
#9
#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);
}
#1
这是.*操作符的使用啊。
#2
你直接用成员函数,没有对象怎么用?这是最基本c++类原则。
#3
成员函数指针必须由对象调用, 没有什么道理可讲。
#4
调用成员函数,必然是调用某个对象的成员函数。因为这个成员函数默认有个this指针,指向一个对象。
没有对象的话,这个成员函数内部对成员变量的读和写到底是针对的哪个对象??所以必须有明确的对象来调用成员函数
没有对象的话,这个成员函数内部对成员变量的读和写到底是针对的哪个对象??所以必须有明确的对象来调用成员函数
#5
据说c++11的lambda可以做到无对象回调函数?
#6
请教楼主:楼主能不能解释一下这句是什么意思???
typedef int (CTest::*TestFunc)(char * szBuf );
#7
那貌似也不是成员函数吧!
#8
可以这么写
#9
#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);
}