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 正确性:

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 回答