Оберните параметр (ы) в своем классе как constexprs. Эффективно это похоже на черту, поскольку она параметризует класс с набором поплавков.
class MyParameters{
public:
static constexpr float Kd =1.0f;
static constexpr float Ki =1.0f;
static constexpr float Kp =1.0f;
};
, а затем создает шаблон, в котором используется тип класса в качестве параметра
template <typename NUM, typename TUNING_PARAMS >
class PidController {
// define short hand constants for the PID tuning parameters
static constexpr NUM Kp = TUNING_PARAMS::Kp;
static constexpr NUM Ki = TUNING_PARAMS::Ki;
static constexpr NUM Kd = TUNING_PARAMS::Kd;
.... code to actually do something ...
};
а затем использовать его так ...
int main (){
PidController<float, MyParameters> controller;
...
...
}
Это позволяет компилятору гарантировать, что для каждого экземпляра шаблона с одним и тем же пакетом параметров создается только один экземпляр кода. Это касается всех проблем, и вы можете использовать float и doubles как constexpr внутри шаблонного класса.