Ho appena scritto una semplice funzione di utilità per std :: string. Poi ho notato che la funzione sarebbe esattamente la stessa se lo std::string
fosse un std::wstring
o un std::u32string
. È possibile utilizzare una funzione di modello qui? Non ho molta familiarità con i modelli, e std::string
e std::wstring
sono modelli stessi, il che potrebbe essere un problema.È possibile scrivere una funzione per std :: string e std :: wstring?
template<class StdStringClass>
inline void removeOuterWhitespace(StdStringClass & strInOut)
{
const unsigned int uiBegin = strInOut.find_first_not_of(" \t\n");
if (uiBegin == StdStringClass::npos)
{
// the whole string is whitespace
strInOut.clear();
return;
}
const unsigned int uiEnd = strInOut.find_last_not_of(" \t\n");
strInOut = strInOut.substr(uiBegin, uiEnd - uiBegin + 1);
}
È un modo corretto per farlo? Ci sono insidie con questa idea. Non sto parlando di questa funzione, ma del concetto generale di utilizzare una classe di modelli StdStringClass
e di chiamare le solite funzioni std::string
come trovare, sostituire, cancellare, ecc.
I non vedo nulla di particolarmente sbagliato. Per me, il nostro modello sembra buono. Nessun problema per l'utilizzo di alcune funzioni specifiche. Semplicemente non si compila se dai un parametro che non ha usato la funzione all'interno del template – Garf365
'find' e' replace' richiederà qualche trucco, dal momento che i tipi di caratteri sono diversi. Ad esempio, la funzione precedente non funzionerebbe per 'std :: wstring', perché' std :: wstring :: find_first_not_of' non accetta un 'const char *', ma un 'const wchar_t *'. –
Seem sta bene per me, tranne invece che per 'unsigned int', raccomando di usare' typename StdStringClass :: size_type' o auto se C++ 11 è abilitato. – Radek