我看過QT對信號/插槽機制應用了簽名規範化過程。 MOC生成器基本上從信號/插槽中刪除了常量參考限定符,並且僅通過值傳遞它們。QT得到規範化簽名有什麼好處
我有一個類,它會頻繁地生成一個名爲BIG_DATA的大數據結構,而其他類在每次發出時都需要捕獲這個數據結構。
struct BIG_DATA
{
// very big data
};
class DataGenerator
{
// some methods which generate BIG_DATA
signals:
void data_updated(const BIG_DATA &);
};
我該怎麼辦:
connect(&data_generator_object, SIGNAL(data_updated(const BIG_DATA &)), this, SLOT(catch_new_data(const BIG_DATA &)));
什麼QT的作用:
connect(&data_generator_object, SIGNAL(data_updated(BIG_DATA)), this, SLOT(catch_new_data(BIG_DATA)));
那麼,什麼是這裏除去常量引用預選賽的好處?我將如何處理將整個BIG_DATA複製到多個data_updated信號客戶端的開銷?
似乎最好的方法是使用指向生成的BIG_DATA對象的指針,如果QT不嘗試去除指針簽名。
'connect'是一個函數聲明還是一個函數調用(或者是一個兼有兩者的古怪的宏)?它看起來像一個函數調用。函數調用中不要放入參數類型。 「SIGNAL」呢? –
SIGNAL()和SLOT()只是將參數轉換爲char數組的宏。 connect()是一個函數調用。 –