Voglio scrivere una funzione C++ 11 che accetterà solo stringhe letterali come parametro:C++ 11 Funzione che accetta solo valori letterali stringa?
void f(const char* s) { static_assert(s is a string literal); ... }
Cioè:
f("foo"); // OK
char c = ...;
f(&c); // ERROR: Doesn't compile
string s = ...;
f(s.c_str()); // ERROR: Doesn't compile
etc
Esiste un modo per implementare questo? La firma della funzione è aperta alle modifiche, così come l'aggiunta di macro o altre funzionalità linguistiche.
Se ciò non è possibile, qual è l'approssimazione più vicina? (I letterali definiti dall'utente possono essere utili in ogni caso?)
Se non c'è un modo specifico per la piattaforma in GCC 4.7/Linux?
Cosa farai con stringhe letterali che non puoi fare con non-stringhe-letterali? E che ne dici di passare una variabile 'const char * const' inizializzata usando una stringa letterale? O un riferimento a 'const char (& array) []' a una stringa letterale? – hvd
Questo non è possibile, poiché i valori letterali stringa sono solo array 'char const [N]' e quindi non sono distinguibili da essi. – Xeo
Forse usando un letterale stringa definito dall'utente che converte in un tipo che ha i dati di sola lettura quando è un riferimento di questo valore (quindi non può essere una variabile denominata). L'obiettivo è quello di far rispettare che la stringa viene letteralmente digitata nel codice al punto di chiamata e compilata staticamente nell'immagine dell'applicazione. –