【发布时间】:2016-07-02 11:41:06
【问题描述】:
我正在编写需要将成员函数指针发送到接受 void * 作为参数的记录器方法的代码。我无法将其从 void *.我也不能使用 c++11。有没有办法让它在没有任何警告的情况下工作。例如:
logger.h
#ifndef _LOGGER_H
#define _LOGGER_H
void logger( void *func );
#endif /* _LOGGER_H */
logger.cpp
#include <cstdio>
#include "logger.h"
void logger( void *func )
{
printf("%lx\n", (unsigned long)func);
}
testCase.cpp
#include "logger.h"
class myClass
{
public:
void testCase( void );
};
void myClass::testCase( void )
{
/* This works on my compiler, but gives warning */
/* warning: converting from 'void (myClass::*)()' to 'void*' */
/* I know this is bad and wrong. */
logger((void *)&myClass::testCase);
/* This compiles without warning */
/* But doesnt work the way I need, gives ffff*/
void (myClass::*ptr)( void ) = &myClass::testCase;
void *m_ptr = ptr;
logger(m_ptr);
}
logger.h 和 logger.cpp 无法更改。
这是在运行 VxWorks,我需要在符号表中查找地址。当我尝试第二种方式时,我得到了 ffff。虽然我在使用其他编译器时得到了一个真实的地址,但它对于 VxWorks 是不同的。
你能想出另一种方法来实现它吗?
【问题讨论】:
-
你可以将一个指针传递给一个包含成员函数指针的结构,或者让它指向一个包含成员函数指针的地址(它们几乎相同,一个语法糖更多)跨度>
标签: c++ pointers parameters casting member