class Sensitivity { public: double getValue() const { return value_; } void setValue(double value) { value_ = value; } private: double value_ = 0.; }; template struct Scale : public T { void scale(double multiplicator) { this->setValue(this->getValue() * multiplicator); } }; template struct Square : public T { void square() { this->setValue(this->getValue() * this->getValue()); } }; class SensitivityEnhanced : public Scale> {}; int main() { SensitivityEnhanced s; s.setValue(10.); s.scale(2.); return 0; }