web-dev-qa-db-ja.com

C ++に存在しないゲッターとセッターを自動的に生成する方法はありますか?

私はObjective-Cの経験があり、Objective-Cでは、getterとsetterがまだ存在しない場合は、コンパイラーに生成させることができます(@synthesize)。

C++でこれを行う方法はありますか、またはすべてのゲッターとセッターを自分で実装する必要がありますか?

19
user142019

私はそのようなユーティリティを認識していません、そしておそらくそれは慣用的な現代のC++ではあまり使用されないでしょう:

最新のC++ガイドラインでは、 あなたのクラスにゲッターとセッターを含めないでください としています。実際、setterはほとんど完全に役に立たず、getterの有用性は非常に限られています。これは、定評のあるソフトウェアエンジニアリングの原則に関連しています 教えてください、尋ねないでください

クラスインスタンスの状態を変更する場合は、次の2つの方法があります。

  1. 状態を変化させるアクションを実行します。
  2. 新しいインスタンスを作成します。

セッターを介して状態を変更することは、通常、コードのにおいがし、アーキテクチャー設計が悪いことを示しています。

純粋に実用性のために、このルールには例外があることを認めます。そして、これは問題ありませんが、ゲッターとセッターを自動生成するためのツールを保証しないほど例外は少ないです。実際、これをリトマステストとして使用できます。このようなボイラープレートを自動生成するツールを希望する場合は、一歩下がってデザインを再検討してください。

31
Konrad Rudolph

コンパイラ自体ではなく、IDE Eclipse CDTのように実際に可能このアクションを自動的に実行します(クラスを右クリック>ソース>ゲッターとセッターを生成...)。

8
ascanio

自分で実装する必要があります

6
flumpb

これを行う方法はありません。ただし、Eclipseのように完全な機能を備えたIDEを使用する場合(Visual Studioにこの機能があるかどうかは不明)、IDE generateあなたのためのゲッター/セッターコード。

4
Eugene S

いいえ、コンパイラはあなたを助けません。たとえば、MACROを作成したり、ビルドステップでコードを生成したりできます。

2
duedl0r

私はこれが遅いことを知っています。私はVS 2015を使用しています。VisualStudioマーケットプレイスからインストールできるプラグイン/拡張機能があり、ここでゲッター/セッターコードを生成するのに便利です https:// marketplace。 visualstudio.com/items?itemName=Gabsii.getter-setter-generator

1
Darrin

アクセサー(c#vb.netの形式で特に簡単)を使用する私にとっての利点は、

1 /セッターまたはゲッターにブレークポイントを設定する可能性。他の場合、メンバーに誰がいつアクセスできるかを知ることができません。

2 /オーバーフローやその他の不良セットをテストする必要がある場合に設定する値を制御できます。これは、例としてビジュアルコンポーネントのプロパティエディタのように、パブリックライブラリで特に必要です。

しかし、これはプライベート内部クラスでは完全には必要ありません。次に、メンバーへの制御されたアクセスの選択は、オブジェクトの最終的なパブリック使用法から設定する必要があります。

1
user7598178

少なくともVisual Studio 2015では見つかりません。ただし、Resharperを使用すると、.hファイルにセッターとゲッターが生成されます。

0
magallanes

POCOを生成するある種のフレームワークを使用している場合、はい、これを実現するためにボイラープレートコードを「生成」することは可能ですが、フレームワークまたはIDE。

0
user195488