0

istreamのように機能する汎用データメンバーを持つクラスを作成する必要があります。すべてのタイプについて、 << 演算子によって受け取ったデータを格納できる必要があります。クラスが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)
};

これは私がそれを解決しようとした方法ですが、「明示的な特殊化は部分的な特殊化構文を使用しています」というエラーが表示されます。

4

2 に答える 2

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-correctness を提案します:

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);
};
于 2012-04-29T17:23:19.483 に答える
0

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

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

これを試して。テンプレートに関する cplusplus.com のドキュメントを読むことも役立つ場合があります。http://www.cplusplus.com/doc/tutorial/templates/

于 2012-04-29T17:25:31.333 に答える