假设我有这个函数来修剪std::string,并决定将其扩展,使其不仅从开头和结尾删除空格,还可以从另一个字符串中传递的任何字符,例如空格、换行符和回车符。
std::string Trim ( const std::string &In_Original,
const std::string &In_CharsToTrim = " \n\r" );
基本上,它会从In_Original的开头和结尾删除所有出现在In_CharsToTrim中的字符。
现在,我不得不为std::string和std::wstring两种类型分别编写此代码。由于我认为这很荒谬,因此我选择使用模板,并且它能正常工作,但是我无法传递默认值,因为std :: wstring版本必须将L" \n\r"
作为默认值(请注意那个小写字母L)。
我尝试过这样:
template <typename Type> Type Trim ( const Type &In_String,
const Type &In_TrimCharacters );
随着:
template std::string Trim ( const std::string &In_String,
const std::string &In_TrimCharacters = " \n\r" );
template std::wstring Trim ( const std::wstring &In_String,
const std::wstring &In_TrimCharacters = L" \n\r" );
但是它没有生效,甚至无法编译。
目前,我所拥有的是一个单独的函数,用于在没有第二个参数时调用,但这完全是错误的方法。
template <typename Type> Type Trim ( const Type &In_String,
const Type &In_TrimCharacters );
std::string Trim ( const std::string &In_String );
std::wstring Trim ( const std::wstring &In_String );
然后,在这个更简单的Trim函数中,我只是调用了完整版本。
因此,基本上我的问题是这样的:
如何根据模板类型传递不同的默认值?基本上是一种特化,其中唯一的变化是默认参数...
在这种情况下,分别传递std::string(“\n \r”)和std::wstring(L“\n \r”)。
或者......还有其他方法可以实现我在这里尝试做的事情吗?