我需要创建一个具有泛型数据成员的类,它的工作方式类似于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)
};
这就是我尝试解决它的方法,但我得到一个错误说法:显式特化是使用部分特化语法。
答案 0 :(得分: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);
};
我会建议一些正确性:
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);
};
答案 1 :(得分:0)
您无法在类声明中指定模板类型。
template <typename T>
class foo{
T* data;
public:
void operator << (T t);
};
试试这个。阅读有关模板的cplusplus.com文档也可能有所帮助。 http://www.cplusplus.com/doc/tutorial/templates/