Ich habe eine Vorlagenklasse mit einem Parameter und einer Reihe kleiner Mitgliedsfunktionen.
Code: Select all
template
class SFRegT {
public:
void Reset() const {
*(volatile uint32_t*)mRegAddr = 0;
}
void Set(uint32_t Value) const {
*(uint32_t*)mRegAddr = Value;
}
uint32_t Get() const {
return *(volatile uint32_t*)mRegAddr;
}
uint32_t operator()() const { return Get(); }
void setBit(const uint16_t BitPos) const {
setSFRBit(mRegAddr, BitPos);
}
// and some more member
};
Jetzt brauche ich eine weitere ähnliche Klasse, bei der mein Parameter kein Vorlagenparameter mehr ist, sondern eine constexpr-Mitgliedsvariable.
Code: Select all
template
class SFRegT {
public:
constexpr SFReg(uintptr_t RegAddr) :
mRegAddr(RegAddr) {
}
// the same member functions as above
private:
const uintptr_t mRegAddr;
};
Gibt es eine Möglichkeit, die Redundanz zu vermeiden? Sie haben also nur eine Vorlagenklasse mit zwei Varianten: eine, bei der der Konstruktor und die Mitgliedsvariable weggelassen werden, wenn der Vorlagenparameter vorhanden ist, und die andere, bei der der Konstruktor und der lokale Parameter vorhanden sind, wenn der Vorlagenparameter weggelassen wird.