Tôi đang cố gắng viết một hàm có thể xử lý cả char & wchar_t bằng cách sử dụng tính năng type_traits của C++ 0x. Có, tôi biết làm thế nào để làm điều đó mà không có type_traits, nhưng tôi muốn làm điều đó bằng cách sử dụng type_traits để hiểu rõ hơn về tính năng này.Có thể sử dụng type_traits để phân biệt giữa char & wchar_t không?
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__));
}
Có thuộc tính type_traits nào khác biệt với char từ wchar_t không?
Pff, giải pháp dễ dàng! ... Tôi xấu hổ vì thậm chí không nghĩ về điều đó ... :( – Xeo
Brilliant! Mặc dù nó phải là is_same trong mã của tôi.Cảm ơn –
Sharath
@Sharat: Đúng, cố định nó ... – MartinStettner