我有一个类为不同类型重载了很多成员,如下所示:
template<typename T, typename Allocator>
Stream& operator << (Stream &Destination, const std::list<T, Allocator> &Value)
template<typename T, typename Allocator>
Stream& operator << (Stream &Destination, const std::vector<T, Allocator> &Value)
现在我正在尝试将它专门用于字符串..我使用以下方法创建了一个 is 字符串:
template<typename T>
struct is_string : public std::integral_constant<bool, std::is_same<char*, typename std::decay<T>::type>::value || std::is_same<const char*, typename std::decay<T>::type>::value> {};
template<>
struct is_string<std::string> : std::true_type {};
然后我想让它专门化如下:
template<typename T = typename is_string<T>::value_type> //How?
Stream& operator << (Stream &Destination, const typename is_string<T>::value_type &Value)
{
std::cout<<"HERE";
return Destination;
}
//I can do:
template<typename T = std::string> //works fine.
Stream& operator << (Stream &Destination, const typename is_literal<T>::value_type &Value)
{
std::cout<<"HERE";
return Destination;
}
如何修复字符串一,使其适用于所有字符串类型,以便 T 是传递的任何字符串类型?
编辑:我正在尝试这样做,以便它专门用于所有字符串类型:char*、const char*、char[]、const char[]、std::string 等。