Ich versuche, eine Kompilierzeit String-Klasse zu machen. Ich habe ein paar Hinweise von this post genommen. Unglücklicherweise bleibe ich bei der Überlastung des Konstruktors hängen: Der Konstruktor const char[]
wird zugunsten des Konstruktors const char*
ignoriert. Irgendwelche Tipps würden geschätzt!Kompilierzeichenfolgen: Konstruktorüberladung Vorrang zwischen 'const char * `/` const char [] `
Es gibt viele coole Dinge, die ich tun kann, wenn ich Compile-Time String-Konstanten machen kann.
- Zeichenfolge Gleichheit Test ist schneller auf
string
alsconst char *
- beseitigen Laufzeitaufwand von impliziten Konvertierungen
const char *
-string
diestrlen()
auf Kompilierung-Konstante Strings nennen. - Compile-Zeit-String-Sets, die Gleichheit zu tun Prüfung statt für Größe < N. von Hashing (dies ist mehrere CPUs von Overhead auf eine Anwendung bei ich suche)
Wenn man sich anschaut, [die 'std :: string' Konstruktorüberladungen] (http://en.cppreference.com/w/cpp/string/basic_string/basic_string) Sie werden sehen, dass sie es nicht tun Ärgere dich sogar mit Arrays, nur mit Zeigern. –
Sie unterstützen auch nicht die Contexpr Konstruktion! Das ist der Punkt. Das templatierte Zeichenarray kann die Zeichenfolgengröße zur Kompilierzeit erkennen. –
Nicht-templated Funktion hat eine Präferenz gegenüber Templates, auch wenn es Zeiger-Decay benötigt. Ich weiß nicht, wie ich das beheben soll. Ich hatte das selbe Problem selbst, als ich das versuchte, und entschied mich schließlich für Strings, die auf variablen Vorlagen basierten. – SergeyA