CRTP에서 머리를 감싸려고합니다. 이 포럼을 포함하여 좋은 소식이 몇 군데 있지만 정적 다형성의 기본 사항에 대해 혼란 스럽습니다. 다음 위키 백과 항목을 보면 :CRTP 정적 다형성에 대한 혼동
template <class T>
struct Base
{
void implementation()
{
// ...
static_cast<T*>(this)->implementation();
// ...
}
static void static_func()
{
// ...
T::static_sub_func();
// ...
}
};
struct Derived : public Base<Derived>
{
void implementation();
static void static_sub_func();
};
내가이 좀 컴파일 타임 가상 함수처럼() 파생 클래스에서 변형 내가 다른 구현을 가지고하는 데 도움이 이해합니다. 하지만, 내 혼란 내가 정상적인 상속으로 인한 자료에 가상 함수, 때와 템플릿 것으로 나는
void func(Base x){
x.implementation();
}
같은 기능을 가질 수 없습니다 생각,하지만 난에이 중 하나를 지정합니다
func(Derived x)
또는 단순히 파생 :: 자료의 간단한 방법을 구현/그림자 반대로
template<class T>
func(T x)
은 그래서 CRTP 실제로, 이러한 맥락에서 저를 구입 않습니다 사용할 수 있습니까? 하나 개 이상의 기능이 포함될 때 CRTP의
struct Base
{
void implementation();
struct Derived : public Base
{
void implementation();
static void static_sub_func();
};
논의, 당신은 [객체 슬라이스] 고통 (https://en.wikipedia.org/wiki/Object_slicing). 다형성 (polymorphic) 동작 (정적 또는 동적 다형성 사용 여부)을 원할 경우 참조 또는 포인터로 전달하십시오. –
나를 위해, 작동하지 않는다 변수 또는 필드 'func'void가 선언 된 void func (Base & x) ... – user32849
@ user32849'Base'는 템플릿입니다. 'Base &'만 사용할 수는 없으므로 템플릿 인자'Base &'를 입력해야합니다. 이는'func'도 템플릿이어야한다는 것을 의미합니다. –
Angew