2012-04-29 2 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) 
}; 

이 내가 그것을 해결하기 위해 시도하는 방법입니다,하지만 난 말하는 에로 얻을 : 명시 적 전문성이 부분 특수화 구문을 사용합니다.

답변

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

당신에게 선생님! 두 번째 코드 블록은 정확히 내가 말한 것입니다. – PaulDaPigeon

0

클래스 선언 내에 템플릿 유형을 지정할 수 없습니다.

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

시도해보십시오. 템플릿에 대한 cplusplus.com 설명서를 읽는 것도 도움이 될 수 있습니다. http://www.cplusplus.com/doc/tutorial/templates/

관련 문제