私のプロジェクトにはいくつかのクラスがあり、それらのクラスのいくつかは他のクラスのメンバーです。 Outerクラスを操作している間、私はそのメンバクラスのいくつかのパラメータにアクセスしたいと思います(独自のメンバクラスを持つこともできます)。深い内部クラスからのメソッドへのアクセスにC++の困難があります
これは、ネストされたクラスが外部クラスの宣言内で宣言されているので、これはC++の "ネストされたクラス"とはまったく異なります。次に、ネストしたクラスは、Outerクラスの外部からアクセスすることはできません。 (ちょっとした情報で、私はゴミを書かないようにしています)。
私はAnalogSensorクラス(実際のアナログセンサーの動作を処理します)を持っていると言います。このクラスには、複数のハンドラがあります(ADCリクエストの処理用、受信データのフィルタリング用、データ処理用、デッドゾーン管理用の最後のハンドラ)。
class LinearSpace {
public:
// getters & setters
private :
uint16_t min_val; // I'm working with embedded devices
uint16_t max_val; // Those are values used for linear interpolations
// purposes
};
class DataHandler {
public:
// some usefuls methods
uint8_t map_raw_data(); // converts the mapped adc_result (10 bits)
// value into 8-bit, interpoled value
private:
LinearSpace input_space; // 2 values spaces used for interpolation
// purposes
LinearSpace output_space;
};
class AnalogSensor{
public:
// "High-Level" methods like void send_adc_request(void); which relies on
// the internal adc hander
private :
AdcHandler adc_handler;
DataHandler data_handler;
Deadzone deadzone;
DataFilter data_filter;
};
独自のゲッターとセッター(getmin、getmax、setmin、setmax)を有している値の範囲のような、他のサブクラスに依存している(またはしない)ことがあり、それらのハンドラ(最小値、最大値)のそれぞれ。ここで
は、私は私のプロジェクトでで終了することができるものの例である:
AnalogSensor mysensor
|
- dataHandler data_handler
|
- LinearSpace input_space
| |
| - min_val
| |
| - max_val
|
- LinearSpace output_space
|
- min_val
|
- max_val
まあ、今AnalogSensorから直接、私は与えられた範囲の最小値とmaximuml値を変更したいと言うすることができますクラス。どうすればよいですか?
編集:電圧と電子測定は、水分などの時間/外部条件に応じて変化することができるように、この要件は、(実行時に)各キャリブレーション処理のためにこれらの値を調整する必要性から来るなど
Iインターネット上の多くのアイデアが見つかりました:
- は友人としてクラスを宣言し
- が同じくらいゲッターとを宣言(AnalogSensorは AdcHandlerとdataFilterなどの友人は...です) 1つの 特定の範囲をターゲットに専念していAnalogSensor内部のセッターは、(それらの数十があるだろうと私はそれはかなり汚れていると思います)
- それとも アクセス私は修正したい正確なvalueRangeへのポインタを使用して( カプセル化Iを壊すことなく、希望)をAnalogSensorクラスから直接得ることができます。あなたがそれらの値にアクセスするだろうどのように
mysensor.getDataHandlerPointer()->getInputSpacePointer()->set_min(my_new_value);
:この特定のケースで
は、私はこのような何かを行うことができますか?
AnalogSensorクラスから直接与えられた範囲です。 "その必要性は、AnalogSensorクラスが何をする必要があるかによって決まります。その説明がなければ、クラスを構成する方法が適切であるかどうか、またはメンバーを設定する方法が合理的であるかどうかをアドバイスするためのコンテキストはありません。 – Peter
実際、私はまだ自分のクラスのためのより良い構造を探しています。私の境界は時間と共に変化するかもしれません(測定、キャリブレーションなどのノイズ)これはAnalogSensorがその範囲の限界に達しないようにする可能性があり、実行時にその制限を微調整して調整できるようにします。 そうするために専用のハンドラを用意する必要はないかもしれませんが、AnalogSensorの本体の中に直接実装する方がはるかに簡単です。 – bebenlebricolo