2011-08-11 5 views
1

자체 시퀀스 클래스를 구현하기 위해 퓨전 시퀀스를 상속 할 수 있습니까? 그렇지 않다면, 왜 안 되니? 예를 들어부스트에서 상속 할 수 있습니까? 퓨전 시퀀스?

:

typedef boost::fusion::vector< 
    std::vector<const char*>, 
    int, 
    double > MyVector; 

class MyVectorWithData : public MyVector 
{ 
public: 
    MyVectorWithData(int i); // Constructor does some initialization 
    // may be other member functions acting on baseclass MyVector 
}; 
+0

부스트 퓨전은 상속받을 시퀀스 façade를 제공합니다. 이 답변을 확인하십시오 : https://stackoverflow.com/a/12240500/1254880 – Tarc

답변

1

는 표준 컨테이너처럼, 퓨전 용기는 가상 소멸자를 제공하지 않기 때문에 그들이 보유 확장에 대한 같은 인수.

내 경험상 템플릿 메타 프로그래밍과 상속이 완벽하게 결합되지 않았습니다. 주요 문제는 기본 클래스가 템플릿 전문화를 선택하지 않는다는 것입니다. 즉, 일부 메타 함수가 fusion::vector에 특화되어있는 경우 fusion::vector에서 파생 된 유형으로 사용할 수 없습니다.

정확하게 기억하면 Fusion은 특성 클래스와 함께 태그를 사용하여 구현을 선택하므로 문제가 될 수 있습니다. 기본 특성 클래스는 단순히 중첩 된 typedef를 "전달"하므로 typedef가 상속되므로 여기에서 작동 할 수 있다고 생각합니다. 그러나 이것이 신뢰할 수 있는지 확신하지 못합니다 (구현이 변경 될 수 있음).

마지막으로 Fusion 컨테이너는 생성 및 할당에 필요한 멤버 함수를 제외한 멤버 함수를 제공하지 않으므로 파생 컨테이너로부터 파생되는 용도는 거의 없습니다. 클래스가 Fusion (메타) 함수와 호환되도록하려면 라이브러리에서 제공하는 extension mechanism을 사용해야합니다.

관련 문제