2012-04-29 5 views
0

istreamのようなものを扱う一般的なデータメンバーでクラスを作成する必要があります。すべてのタイプについて、< <演算子によって受信されるデータを格納することができます。私はそれがCの文字列のために働くべきであるcharのためにクラスが作成されない限り、それが単一の変数のために働きたいです。メンバー関数を特化した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) 
}; 

これは、私はそれを解決しようとした方法ですが、私は言ってERRO取得:明示的な特殊は部分特殊構文を使用しています。

答えて

2

これはあなたが意図したものですか?

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); 
}; 

そしてI(publicの不要な発生を排除することにより、または、さらに簡単な)

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); 
}; 

:あなたが行動を継承することを意図している場合

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

template <> 
class foo<char> 
{ 
public: 
    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

あなたに誇り! 2番目のコードブロックはまさに​​私が結んだものです。 – PaulDaPigeon

0

クラス宣言内にテンプレートタイプを指定することはできません。

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

これを試してください。また、テンプレートに関するcplusplus.comのドキュメントを読むのにも役立ちます。 http://www.cplusplus.com/doc/tutorial/templates/

関連する問題