簡體   English   中英

指向具有可變參數編號的函數的指針

[英]Pointer to a function with variable arguments number

我宣布:

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>類型的值QPair<void (*)( ... ), int> 將其顯式調用為qMakePair<void (*)( ... ), int>( aaa::ccc, 0 )reinterpret_cast aaa::ccc為所需的函數指針類型。

更不用說這(幾乎可以肯定)是非法的 ,因為aaa::ccc沒有正確的簽名,不能通過你正在使用的函數指針類型調用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM