QT がシグナル/スロット メカニズムに署名の正規化プロセスを適用することを読みました。MOC ジェネレーターは基本的に、シグナル/スロットから const 参照修飾子を削除し、値で渡すだけです。
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)));
では、ここで const 参照修飾子を削除する利点は何ですか? BIG_DATA 全体を data_updated シグナルの多くのクライアントにコピーするオーバーヘッドをどうするか?
QTがポインター署名も削除しようとしない場合、生成されたBIG_DATAオブジェクトへのポインターを使用するのが最善の方法のようです。