아래 예제에서는 꽤 일반적인 CRTP 예제 인 두 개의 서로 다른 파생 클래스 인 bar
이 있습니다. 기본 클래스는 유형을해야하기 때문에 기본 클래스의 등을 배열/벡터 /을 가질 수처럼은 보이지 않는다다른 CRTP 파생 클래스 메서드를 반복하십시오.
#include <iostream>
template<typename Derived>
class Base {
public:
void foo() {
static_cast<Derived*>(this)->bar();
}
};
class DerivedA : public Base<DerivedA> {
public:
void bar() {
::std::cout << "A\n";
}
};
class DerivedB : public Base<DerivedB> {
public:
void bar() {
::std::cout << "B\n";
}
};
int main() {
DerivedA a;
DerivedB b;
a.foo();
b.foo();
}
단지 앞으로 일부 bar
방법을 도출하는 방법 foo
있다 T
이 다른 Base<T>
의 라인을 따라
모두 동일한 방법 (이 경우 bar
)가 가정 다른 파생 클래스를 반복 할 수 있기위한 virtual
없이 협약의 어떤 종류가 있습니까?
전체 사례를 게시 하시겠습니까? – asimes
전에'boost :: variant'를 사용하지 않았습니다. 더 이상'Base'가없고'DerivedA'와'DerivedB' 만 남아있을 것이라고 추측하고 있습니까? – asimes
@asimes : 좋아, 나는 당신이 당신의 클래스 정의와 결합하면, 완성 된, 실행 가능한 프로그램이되도록 내 대답을 약간 수정했다. 'Base'를 가지고 있건 없건 상관없이 - 내 코드는 어느 쪽이든 작동합니다. –