c++ - 指向具有可变参数 number 的函数的指针

标签 c++ pointers

我已经声明:

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/

相关文章:

c++ - 在 64 位系统上更大的指针有什么好处?

c - 错误 : Expected expression before char

c++ - 为什么不专门化函数模板呢? (问答)

c++ accumulate如何将特定函数应用于最后一个元素

c++ - 为什么我不能在类的构造函数的初始化列表中初始化一个 ifstream?

c++ - QProcess::startDetached() 不显示控制台窗口

pointers - CUDA:__restrict__ 标签使用

c - 简单变量 i 和 *(&i) 之间的区别;

c++ - 我不明白 <Inside The C++ Object Model> 中 'Argument Initialization' 中的内容

java - 在 java 中加载 c++ library.so 会引发错误 : undefined symbol: XOpenDisplay