2012-04-29 81 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