类中的函数指针

shootingstars 2015-04-24 03:48:56
好长时间不用C++了,回到C++怎么好多代码写不出来了。。。
class TestClass
{
typedef void (*fun)();
fun m_fun;

void function();
void reg();
};
void TestClass::function()
{
}
void TestClass::reg()
{
m_fun = function; // ERROR
}
我的想法是把function赋值给m_fun,咋不对呢?
多谢各位了。
...全文
200 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
shootingstars 2015-04-24
  • 打赏
  • 举报
回复
@hua_0602 就是想设置一个函数地址(这个地址是这个类或者继承这个类的)到这个类中的变量中,能够通过这个函数变量来存取本对象实例的数据。 @tpnndhqc 类中的函数也是存在的?只不过在内部调用的时候增加了对于这个函数的this指针而已?想不通为啥不能赋值呢?
花山主人 2015-04-24
  • 打赏
  • 举报
回复

using namespace std;
function<void (void)> test_fun;

class TestClass
{
public:
    void function();
};

void TestClass::function()
{
    printf("dddd\n");
}

int main()
{
    TestClass a_test;
    test_fun = bind(&TestClass::function, a_test);
    test_fun();
    return 0;
}

fly_dragon_fly 2015-04-24
  • 打赏
  • 举报
回复
类型不匹配,直接赋值也没用,没有this
function<void ()> m_fun;
void TestClass::reg()
{
    m_fun = bind(function,this); // ERROR
}
Sping 2015-04-24
  • 打赏
  • 举报
回复
函数指针赋值是必须要赋个地址给它; 比如类的头文件里面 static int IsIdfeDisc(wstring strPath){return 0;}; 那就可以用 typedef int (*fun)(wstring strPath); fun m_fun; 然后其他地方m_fun = IsIdfeDisc; 这样是对的,因为函数是static 的,有明确的地址! 但是你不加static,也不是全局函数,那么这个函数地址没办法确定,所以你才不能赋值。 有说错的地方欢迎指正。
花山主人 2015-04-24
  • 打赏
  • 举报
回复
引用 7 楼 shootingstars 的回复:
@yangyunzhao 就是不想静态啊,我为啥在类中定义一个函数指针啊,就是希望能够与每个实例本身的数据相关。 否则不需要这么麻烦了,直接在外层定义一个函数指针就行啊。
楼主,你说下你的目的吧,你之前说的,我愣是没听懂什么意思,你想要达到什么目的呢?
shootingstars 2015-04-24
  • 打赏
  • 举报
回复
@yangyunzhao 就是不想静态啊,我为啥在类中定义一个函数指针啊,就是希望能够与每个实例本身的数据相关。 否则不需要这么麻烦了,直接在外层定义一个函数指针就行啊。
yangyunzhao 2015-04-24
  • 打赏
  • 举报
回复
静态
shootingstars 2015-04-24
  • 打赏
  • 举报
回复
@hua_0602 多谢,问题是:

class TestClass;
typedef void (TestClass::*fun)();
class TestClass
{
	
	fun m_fun;

	void function();
	void reg();
	void call();
};

void TestClass::reg()
{
	m_fun = &TestClass::function;

}

void TestClass::function()
{
	printf("dddd %d\n");
}

void TestClass::call()
{
	m_fun(); // ERROR
}
可以修改为

TestClass dd;
void TestClass::call()
{
	(dd.*m_fun)();
}
但是我希望每个m_fun都与本身的对象有关啊,为啥需要绑定到某一个对象上呢?
花山主人 2015-04-24
  • 打赏
  • 举报
回复
类型不匹配 你定义的函数指针是:typedef void (*fun)(); 也就是说,你后面用到的m_fun它的类型是 typedef void (*)(), 请注意,这个函数指针不是类的成员函数的指针类型, 它只是一个普通(非类成员)函数指针。而function函数是什么类型,它是类的成员函数,也是TestClass::function(), 它们是两种不同的类型。 总结:虽然你是在类里面typedef,但是这只能代表这个定义只在类中有效,并不代表你这个定义的函数指针是针对类的成员函数。
shootingstars 2015-04-24
  • 打赏
  • 举报
回复
@mrlgy 这个怎么把类名加上?

m_fun = &TestClass::function; // 也不对啊
花山主人 2015-04-24
  • 打赏
  • 举报
回复
发代码能不能按格式来?!

class TestClass
{
    typedef void (*fun)();
    fun m_fun;

    void function();
    void reg();
};

void TestClass::function()
{
}

void TestClass::reg()
{
    m_fun = function; // ERROR 
}
mrlgy 2015-04-24
  • 打赏
  • 举报
回复
function是成员函数,把类类名加上

65,186

社区成员

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

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