是否可以使用type_traits来区分char& wchar_t的?

时间:2011-07-07 11:11:07

标签: c++ typetraits

我正在尝试编写一个可以处理char和amp; wchar_t使用C ++ 0x的type_traits功能。是的,我知道如何在没有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__));
}

是否有任何type_traits属性可以区分char和wchar_t?

2 个答案:

答案 0 :(得分:7)

我认为有一个is_same属性,所以

SplitIt(base, ext, fullFilePath, is_same<T, char>());

应该有用。

答案 1 :(得分:1)

AFAICS,<type_traits>标题中没有类似内容。但是,自己制作它是微不足道的,你只需要切换重载,因为以下现在为std::false_type(以及其他所有内容)和char std::true_type产生wchar_t

#include <type_traits>

template<class T>
struct is_wchar
  : std::false_type
{
};

template<>
struct is_wchar<wchar_t>
  : std::true_type
{
};

// usage:

SplitIt(base, ext, fullFilePath, is_wchar<T>());