나는 정말로 변경하고 싶지 않지만 확장하고 싶은 클래스를 제공하고 있습니다. 저는 템플릿 클래스에 적용된 Decorator 패턴을 실험하는 패턴 및 템플릿 초보자입니다. Template 클래스는 또 다른 클래스에서 (의미를 정확히 이해한다면) 멤버에 대한 포인터를 포함합니다. member-to-member는 XML istream의 디시리얼라이저입니다. 'T'유형은 직렬화 될 XML 문서 유형입니다.템플릿 기본 클래스 함수 포인터 유형에 액세스
template <typename T> class B {
public:
typedef std::auto_ptr<T> MYFUN(
std::istream&, const std::string&, const std::string&);
public:
B<T>(MYFUN* p);
private:
MYFUN *fptr;
std::string aString1;
std::string aString2;
}};
typedef입니다은 http://www.parashift.com/c++-faq-lite/pointers-to-members.html#faq-33.5을 읽은 후 나에게 이상한보고, 아직이 클래스는 그대로 잘 작동하는 것 같다. 제공된 헤더 파일에는 추가 #define이 없으므로 약간 신비 스럽습니다. 이 컴파일하려고 할 때
template <typename T>
class D : public class B<T>
{
D(B<T>::MYFUN *fPtr, B<T> *providedBase); //compiler complaint
//Looks like B
private:
B* base_;
};
template <typename T>
D<T>::D(B<T>::MYFUN *p, B<T> *base) //compiler complaint
:
B<T>::B(p), base_(providedBase)
{ }
, 내가에서 구문 불만을 얻을 :
지금 내가 MYFUN에 의해 반환되는 auto_ptr은 객체에 조금 더 일을 원하기 때문에 실내 장식으로, 그것을 확장하려고 두 줄을 표시합니다. 오류는 '예상'과 같음) 'at *'입니다. MYFUN에 대한 불만은 없습니다.
I는 D와 동일한 서명 D의 포인터 - 대 - 부재 - 정의 다시
, 즉 이 작동//change MYFUN to NEWFUN in D)
typedef std::auto_ptr<T> MYNEWFUN(
std::istream&, const std::string&, const std::string&);
. 필자는 B를 만들 수있는 모든 D/Decorator에 대해이 작업을 수행하지 않는 것을 선호합니다. 전 typedef를 전역 적으로 수행하려고했지만 정의되지 않은 템플릿 매개 변수 때문에 구문을 올바르게 가져올 수 없습니다.
을 왼쪽으로 '공개'선언 – user106740