2012-04-29 113 views
0

我需要用通用數據成員創建一個類,它的工作原理類似於istream。對於所有類型,它應該能夠存儲它通過< <運營商收到的數據。我希望它能用於單個變量,除非該類是爲char創建的,它應該適用於C字符串。專門研究成員函數的C++

template <typename T> 
class foo<C>{ 
    T* data; 
public: 
    void operator << (T t); 
}; 

template <typename T> 
class foo<char>: public foo<T>{ 
public: 
    void operator << (char* str) 
}; 

這是我如何試圖解決這個問題,但我得到一個埃羅說:顯式的專業化使用部分專門的語法。

回答

2

這是你想要的嗎?

template <typename T> 
class foo 
{ 
    T* data; 
public: 
    void operator<<(T t); 
}; 

template <> 
class foo<char> 
{ 
public: 
    void operator<<(char* str); 
}; 

如果你的意思是繼承行爲,你需要這樣的事:

template <typename T> 
class foo_impl 
{ 
    T* data; 
public: 
    void operator<<(T t); 
}; 

template <typename T> 
class foo : public foo_impl<T> 
{ 
}; 

template <> 
class foo<char> : public foo_impl<char> 
{ 
public: 
    void operator<<(char* str); 
}; 

(或者,更簡單的通過消除不必要的public出現)

template <typename T> 
class foo_impl 
{ 
    T* data; 
public: 
    void operator<<(T t); 
}; 

template <typename T> 
struct foo : foo_impl<T> 
{ 
}; 

template <> 
struct foo<char> : foo_impl<char> 
{ 
    void operator<<(char* str); 
}; 

我會建議一些const正確性:

template <typename T> 
class foo_impl 
{ 
    T* data; 
public: 
    void operator<<(const T& t); 
}; 

template <typename T> 
struct foo : foo_impl<T> 
{ 
}; 

template <> 
struct foo<char> : foo_impl<char> 
{ 
    void operator<<(const char* str); 
}; 
+0

您的榮譽先生!第二個codeblock正是我所知道的。 – PaulDaPigeon