Я просто написал простую функцию утилиты для std :: string. Затем я заметил, что функция будет выглядеть точно так же, если std::string
был std::wstring
или std::u32string
. Можно ли использовать здесь функцию шаблона? Я не очень хорошо знаком с шаблонами, и std::string
и std::wstring
являются самими шаблонами, что может быть проблемой.Можно ли написать одну функцию для std :: string и 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);
}
Это правильный способ сделать это? Есть ли подводные камни с этой идеей. Я не говорю об этой функции, но общая концепция использования шаблонного класса StdStringClass
и вызов обычных функций std::string
, таких как поиск, замена, стирание и т. Д.
I не вижу ничего особенного. Для меня наш шаблон кажется хорошим. Нет проблем с использованием определенной функции. Он просто не компилируется, если вы указываете параметр, который не использовал функцию внутри шаблона – Garf365
'find' и' replace' потребует некоторой обманки, так как типы символов различаются. Например, вышеприведенная функция не будет работать для 'std :: wstring', потому что' std :: wstring :: find_first_not_of' не принимает 'const char *', а 'const wchar_t *'. –
Seem отлично подходит для меня, кроме как вместо 'unsigned int', я бы рекомендовал использовать' typename StdStringClass :: size_type' или auto, если включен C++ 11. – Radek