setInternalTickCallback and class method pointer

Mr.Hankey
Posts: 4
Joined: Thu Jan 29, 2009 4:36 pm

setInternalTickCallback and class method pointer

Post by Mr.Hankey »

Hi,

I'm trying to figure out how to pass a class method pointer to the setInternalTickCallback method.

This is the class:
class PhysicsManager: public Singleton<PhysicsManager>
{
public:
PhysicsManager();
virtual ~PhysicsManager();

static PhysicsManager& getSingleton(void);
static PhysicsManager* getSingletonPtr(void);

private:
void tickCallback(btDynamicsWorld *world, btScalar timeStep);
};
}
I want to register tickCallback method to be registered with setInternalTickCallback, but I can't figure out how this is done.

Here is what I tried so far, but this does not work

Code: Select all

	dynamicsWorld_->setInternalTickCallback(PhysicsManager::tickCallback);
	dynamicsWorld_->setInternalTickCallback(&PhysicsManager::tickCallback);
GCC says: No such function... btDynamicsWorld::setInternalTickCallback(<unresolved overloaded function type>) or
no matching function for btDynamicsWorld::setInternalTickCallback(void (PhysicsManager::*)(btDynamicsWorld*, btScalar))

:(
phobos
Posts: 1
Joined: Sat Jan 31, 2009 6:21 pm

Re: setInternalTickCallback and class method pointer

Post by phobos »

You cannot pass a pointer to object function as a pointer to function. Do something like this:

Code: Select all

void(* 	btInternalTickCallback )(btDynamicsWorld *world, btScalar timeStep)
class PhysicsManager: public Singleton<PhysicsManager>
{
/* ... */
public:
void tickCallback(btDynamicsWorld *world, btScalar timeStep);
static void _tickCallback(btDynamicsWorld* world, btScalar timeStep)
{
getSingletonPtr()->tickCallback(world, timeStep);
}
};
Then you can write:

Code: Select all

dynamicsWorld_->setInternalTickCallback(&PhysicsManager::_tickCallback);
Mr.Hankey
Posts: 4
Joined: Thu Jan 29, 2009 4:36 pm

Re: setInternalTickCallback and class method pointer

Post by Mr.Hankey »

thanks, that did the trick :wink: