이런 경우엔 어떻게 해야하죠?

익명 사용자의 이미지

간단하게 요약하자면

template
A {
A *p, *n;
T* p;
};

template
B {
B *p, *n;
T p;
};

이 두 클래스의 부모 클래스를 만들고 싶었는데요.

template class C 를 만들어서

A : public C

B : public C

와 같이 상속받게 하고 싶었어요...

근데 뜻밖의 문제가 있다면

자기참조형 포인터 p, n이 부모의 타입(C*)을 그대로 쓴다는 거였죠.

... 자기참조형 포인터라 템플릿 인자로 넣기엔 모순이 생기고,

... 모든함수를 가상함수로 바꾸는 것도 조금 그렇고...

혹시나 해서 decltype(this) 라는 괴상한 타입을 상상해봤는데 ... 그건 좀 아니었고요.

다시 요약하자면

멤버변수 중 자기참조형 포인터를 템플릿으로 상속하는 건... 불가능한가요?

현영박의 이미지

템플릿 문법이 안보이네요. html 태그로 취급됬나봐요... ㅜㅠ 질문방향이랑 크게 영향이 없어서 다행이네요

현영박의 이미지

한글에도 오타가... 질문방향에 크게 영향이 없어서 다행이네요

세벌의 이미지

twinwings의 이미지

Quote:
자기참조형 포인터라 템플릿 인자로 넣기엔 모순이 생기고

https://en.wikipedia.org/wiki/Curiously_recurring_template_pattern wrote:
The curiously recurring template pattern (CRTP) is an idiom in C++ in which a class X derives from a class template instantiation using X itself as template argument.

이게 도움이 될 것 같네요.