私はこのような構造を持っています:
struct CalibrationInputs {
float eta;
float rawcl_Es0;
float rawcl_Es1;
float rawcl_Es2;
float rawcl_Es3;
};
これは大きな関数の入力です
float calibrate(CalibrationInput inputs)
バイアス入力を使用して関数を適用したいcalibrate
ので、フィールドを変更する方法が必要ですCalibrationInputs
。これは簡単な作業ですが、うまくやりたいと思っています。私が今していることは次のとおりです。
class BiasBase
{
public:
BiasBase(float amount, std::string type) : m_amount(amount), m_type(type) { };
virtual void bias(CalibrationInputs & calibration_inputs) = 0;
std::string get_name() const { return m_type + "_" + get_amount_string(); };
float get_amount() const { return m_amount; };
protected:
float m_amount;
std::string m_type;
};
class BiasE2 : public BiasFixed
{
BiasE2(float amount) : BiasFixed(amount, "E2") { };
void bias(CalibrationInputs & calibration_inputs) {
calibration_inputs.rawcl_Es2 *= (1 + m_amount);
}
};
class BiasE1 ...
class VeryComplexBias ...
class RandomBiasE2 ...
私はそれらを次のように使用しています:
CalibrationInput input;
CalibrationInput input_bias_e1 = input;
...
BiasE1 bias_e1(0.01);
bias_e1.apply_bias(input_bias_e1);
float result = calibrate(input);
float result_bias_e1 = calibrate(input_bias_e1);
...
Bias
問題は、クラスを組み合わせて、同時に 2 つ以上のバイアスを適用したい場合はどうすればよいかということです。この簡単な問題を過度に複雑にしたくはありませんが、デコレータを使用できるかもしれません。問題は、すべてのデコレータ クラスが から継承する必要があることCalibrationInputs
です。
この問題に適した設計は何ですか?