我有这样的结构:
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
类,同时应用两个或多个偏差怎么办?我不想让这个简单的问题过于复杂,但也许我可以使用装饰器。问题是每个装饰器类都需要继承自CalibrationInputs
,所以我每次都在复制字段,不是吗?
这个问题有什么好的设计?