我试图编写一个函数,可以使用C++ 0x的type_traits功能处理char和wchar_t.是的,我知道如何在没有type_traits的情况下完成它,但我想使用type_traits来更好地理解该功能.
template <typename T>
void SplitIt(T* base, T* ext, const std::basic_string<T>& fullFilePath, std::true_type)
{
_splitpath(fullFilePath.c_str(),NULL,NULL,base,ext);
}
template <typename T>
void SplitIt(T* base, T* ext, const std::basic_string<T>& fullFilePath, std::false_type)
{
_wsplitpath(fullFilePath.c_str(),NULL,NULL,base,ext);
}
template <typename T>
std::basic_string<T> GetBaseName(const std::basic_string<T>& fullFilePath)
{
T base[300], ext[50];
SplitIt(base, ext, fullFilePath, /*What goes here?*/);
return std::basic_string<T>(buf) + ext;
}
int main()
{
std::basic_string<TCHAR> baseName = GetBaseName(std::basic_string<TCHAR>(__FILE__));
}
Run Code Online (Sandbox Code Playgroud)
是否有任何type_traits属性可以区分char和wchar_t?
我认为有一处is_same房产,所以
SplitIt(base, ext, fullFilePath, is_same<T, char>());
Run Code Online (Sandbox Code Playgroud)
应该管用.