나는 다음과 같은 코드가 작동을호기심 반복 템플릿 및 템플릿 매개 변수에 따라 하위 클래스는
template < class __derived, class __object = typename __derived::Object >
struct Base {
using Derived = __derived;
using Object = __object;
void function(Object o) { return Derived::function(s); }
}
//template < class __derived >
//struct Base {
// using Derived = __derived;
// using Object = typename Derived::Object;
// void function(Object o) { return Derived::function(s); }
//}
template < class __object >
struct Derived : public Base< Derived<__Object> > {
using Object = __object;
void function(Object o) { ... }
}
를 만들기 위해 노력하고 문제와 문제가
Derived<double> obj;
는, 컴파일러가없는 주장 내가 선언하여 개체를 인스턴스화 문자 Object
을 Derived
클래스 내에서 찾을 수 있고 Base
클래스의 두 번째 템플릿 매개 변수를 추론 할 수 있습니다. 주석 된 버전에서도 같은 오류가 발생합니다.
나는 Eigen3 코드, 특히 가상 함수의 사용을 피하기 위해 사용하는 CRTP (Curiously Recurring Template Pattern)의 영향을 받아이 작업을 수행하려고합니다. Eigen3 실제로 traits
클래스를 사용하지만 나는 현재의 경우에 그것을 모방하는 방법을 알아낼 수 없습니다. 누구든지 이에 대해 어떤 제안이 있습니까? 미리 감사드립니다! 당신이를 사용해야합니다 있도록
template < class __object >
struct Derived;
불행하게도, 당신은 더 싶어 : 당신은 A가 B로부터 상속 할 경우
Base' 인스턴스화 할 수 없습니다 'Derived :: Object'가 아직 존재하지 않기 때문입니다. 예, 특성 클래스를 사용하십시오. –
이중 밑줄에 식별자를 사용하지 마십시오. 그것들은 C++ 구현 (컴파일러/라이브러리)을 위해 예약되어 있습니다. – dyp
이것은 무엇입니까? C++ 버전의 Inception? – Praetorian