2
我有重載很多成員對不同類型的如下一類:專營模板IS_STRING
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)
而現在我想專注它串..我的是字符串中使用創建:
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;
}
我怎樣才能解決串o ne,以便它適用於所有字符串類型,以便T是任何字符串類型傳遞的?
編輯:我想這樣做,這樣是專門爲所有字符串類型:字符*,爲const char *的char [],爲const char [],的std :: string等。
爲什麼檢查,如果類型爲字符串,而不是直接的專業運營商''<<對'的std :: string','字符常量*'...? –
因爲我必須專門處理每種可能類型的字符串? std :: string,const char *,char *,char [],const char []等等。?我認爲如果有辦法做我想做的事情,它會自動專門爲這種類型。 – Brandon
我確定我錯過了一些東西,你爲'Stream&operator <<()'覆蓋了其他類型,爲什麼不是'const std :: string&'呢?誠然,我沒有嘗試過,但它*似乎*它會做你想做的(我認爲)? – WhozCraig