Ich versuche, die maximale Größe für eine Klasse, die ich erstelle, explizit zu begrenzen und habe eine Lösung gefunden, die scheinbar funktioniert, aber hässlich wirkt. Das Beispiel ist etwas erfunden, aber ich würde es gerne wissen, falls die Situation jemals natürlicher erscheint.Überprüfung der C++ Initialisierungslisten-Beschränkung
Hier ist es wie:
PriorityQueue(const unsigned int maxSizeIn) :
maxSize((maxSizeIn >= SOME_CONSTANT) ? SOME_CONSTANT - 1 : maxSizeIn),
queueArray(new PriorityPair<T>*[maxSizeIn]()),
currentHeapSize(0)
{
}
Die clunkiness kommt in der intializer Liste der ternären Ausdruck aus mit. Während dies funktioniert, sieht es nicht besonders gut aus und zwang mich, jede Komponente der Liste nach Zeilen zu trennen. Ich habe versucht, diese Logik in den Körper des Konstruktors zu verschieben, aber ich stieß auf Probleme, wie ich das versuchte.
Aus Gründen der Klarheit habe ich das Original bearbeitet, um besser hervorzuheben, was ich frage. Das heißt, gibt es eine funktional äquivalente Methode, die sauberer ist, um Einschränkungen für Initialisierungslisten zu setzen.
Was sollte die Lösung für ein solches Problem sein?
Warum kann 'maxSizeIn' nicht gleich' numeric_limits :: max() '? –
NathanOliver
@NathanOliver dieser Teil ist beliebig. Ich mache mir mehr Sorgen wegen der Ungeschicklichkeit der ganzen Sache. – Caboose