1

QSharedDataQt には、およびを介して参照カウントが統合されたオブジェクトを作成するためのビルトイン サポートがありQSharedDataPointerます。すべてうまく機能しますが、そのようなオブジェクトごとに多くのコードを記述する必要がありますQSharedData

5 ~ 10 個のフィールドを持つ単純な構造の場合、これには非常に多くのほぼ同じコードが必要です。そのようなクラスの生成を自動化する方法はありますか? たぶん、短い説明を取り、すべてのアクセサーで実装クラスとオブジェクトクラスを自動的に生成するジェネレーターがいくつか存在するのでしょうか?

4

2 に答える 2

1

これらのためにジェネレーターは存在しないと思いますが、2つのことを提案します。

2つのサブクラスには、見た目の共有性を実装する方法を示す簡単な例があります。自分で作成する必要がなかったので、これ以上お手伝いすることはできません。

考え直して、すべてのデータフィールドを公開し、QSharedData派生物を参照カウント付きの構造体のようなクラスとして使用してみませんか?カプセル化はうまくいかないかもしれませんが、注意すれば、何も悪いことは起こらないはずです。

于 2010-06-14T09:57:36.887 に答える
1

通常、QSharedData/Pointer を使用する場合、copy ctor または operator= を実装する必要はありません。デフォルトの実装は、QSharedData 派生メンバーをコピー/割り当てします。これは通常、Right Thing (TM) を実行します。public クラスの場合、private オブジェクトを作成する ctor を実装する必要があります。private クラスがヘッダーではなく実装で宣言されている場合 (これはより良い方法です)、dtor (何もしない、唯一のポイントはそうではないということです) private 宣言の後に、.cpp でインライン化および定義されます)。プライベート クラスの場合、メソッド/ctor/dtor の実装は必要ありません。単純な値ベースのクラスの場合、setter を作成するのはもちろん面倒ですが、プレーンなプライベート メンバー変数を使用する場合も同様です。LOC のオーバーヘッドは、メンバーの数によって増加しません。

いいえ、スクリプトや emacs マクロなどを作成することはそれほど難しくありませんが、私が知っている標準的なジェネレーター ソリューションはありません。おそらく、そのようなものを公開されているツールボックス、または QtCreator に追加することは理にかなっているでしょう...

于 2010-06-14T14:16:14.310 に答える