我已经声明:
class aaa {
public:
static std::queue<QPair<void (*)( ... ), int> > m_commands;
static int bbb();
static void ccc(...);
};
我在 bbb() 方法中写道:
int aaa::bbb() {
m_commands.push( qMakePair( aaa::ccc, 0 ) );
}
但它提示:
error C2664: 'void std::queue<_Ty>::push(QPair<T1,T2> &&)' : cannot convert parameter 1 from 'QPair<T1,T2>' to 'QPair<T1,T2> &&'
为什么?当我有这样的功能时:
void reg( void ( *invoker )( ... ), int args ) {
m_commands.push( qMakePair( invoker, args ) );
}
我可以通过这种方式轻松地向上述函数发送一个静态函数:
reg( aaa::ccc, 0 );
最佳答案
qMakePair( aaa::ccc, 0 )
正在(大概)返回类型为 QPair<void (*)(), int>
的值,因为它不知道您需要 QPair<void (*)( ... ), int>
类型的值.将其显式调用为 qMakePair<void (*)( ... ), int>( aaa::ccc, 0 )
或 reinterpret_cast
aaa::ccc
到所需的函数指针类型。
更不用说这是(几乎可以肯定)非法,因为 aaa::ccc
没有正确的签名,无法通过您正在使用的函数指针类型调用。
关于c++ - 指向具有可变参数 number 的函数的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11401713/