ich ziemlich neu bin zu C++ und ich versuche mein Bestes, um so etwas zu konstruieren:C++: Konstrukt Straße mit zwei gleichen typenames aus Vorlage
enum class Unit { km, m, cm };
template<int v, Unit u>
struct Measure {
static const int value = v;
static const Unit unit = u;
};
template<typename Measure, typename Measure>
struct Measures_same {
static const bool value(const Measure m1, const Measure m2) {
return m1.unit == m2.unit;
}
};
Mein Ziel hier ist, dass ich meine Eigenschaft aufrufen wie folgt:
Measures_same<Measure<1, Unit::km>,Measure<1, Unit::cm>>::value
, die false zurückgeben würde. Offensichtlich darf ich nicht den gleichen Typnamen in der Vorlage zweimal (Vorlage) definieren, aber ich bin mir nicht sicher, wie ich es sonst tun sollte. Wenn ich einen davon entferne, stimmt die Anzahl der Argumente nicht mehr überein.
Wie soll ich fortfahren?
Vielen Dank im Voraus!
Just do 'template' und verwenden 'M1' und' M2'? Sie können dies auch tun, ohne eine statische Funktion zu verwenden, indem Sie "constexpr" verwenden. Außerdem macht es keinen Sinn, ein 'const bool' zurückzugeben, man könnte auch' bool' zurückgeben. –
cdhowie
Wie dumm von mir, vielen Dank! – user1390504
Es sieht so aus, als würden Sie eine Mischung aus objektorientierter Programmierung und Template-Metaprogrammierung machen. Wahrscheinlich sollte "Measure" keine Vorlage sein, da Sie wahrscheinlich Werte zur Laufzeit ändern wollen. Vielleicht könnte es eine Vorlage basierend auf der Dimension der Einheit (Länge, Masse, Ladung, etc.) sein. Wenn Sie Ihre Frage bearbeiten, um ein vollständiges Programm (ein [mcve]) zu erstellen, damit wir sehen können, wie Sie ein 'Measures_same'-Objekt verwenden möchten, wird klarer, was geändert werden muss, um Ihre Anforderungen zu erfüllen. –