【发布时间】:2011-09-08 11:23:18
【问题描述】:
Expanding on this question,看来我没有提供足够的细节。
我有一个名为CallbackObject 的对象,该对象旨在包含一个对象实例,以及要调用的函数的信息,以及在调用时要传递的参数。
使用示例:
结构点 { 浮动 x,y ; 无效打印(int numTimes) { for(int i = 0 ; i ocall( p, &Point::print, 5 ); ocall.exec() ; }我遇到的唯一问题是如果objectType 是指针类型,那么(obj.*fcnPtr) 会失败,因为如果obj 是指针,它应该真正读取( (*obj).*fcnPtr) 或(obj->*fcnPtr)。
现在我有一个解决方案,我在其中定义 另一个 CallbackObject 类,如下所示:
模板但这充其量是笨拙的,最坏的情况是难以使用,如果其他人正在使用此代码,如果正在使用的对象类型实际上是一个指针,他们将不得不创建一种不同类型的回调对象。
有没有办法解决这个问题?
【问题讨论】:
-
第一个问题中提供的任何答案都可以,包括部分专业化(您的第二个类可能是第一个类的部分专业化)和使用重载函数作为辅助函数实际执行调用。
-
他们将如何为班级工作?
-
完全一样。你的问题是在
exec()中很难写出表达式。如果您使用 Johannes 或我的回答,它会提供一个辅助函数,您可以使用该函数在exec()中编写该语句。所述辅助函数可以只是全局函数或私有成员函数。 -
是的,exec() 很难写。我用 if 语句解决了问题,请参阅下面的答案。你还能怎么写 exec?
标签: c++ templates function-pointers