다른 유형의 객체를 저장하는 디렉토리 객체를 구현하고 싶습니다. 이름으로 객체에 액세스 할 수 있어야하고 실제 포인터 유형을 가져 와서 직렬화해야합니다. 내가 생각하는 객체는 다음과 같습니다.오브젝트 디렉토리 구현 : boost :: any, boost :: variant 또는?
struct Object {
std::string name;
SomeType ptr;
};
struct Dir {
std::string name;
std::set<Object> objects;
};
"SomeType"나는 Boost :: variant를 사용하려고 생각했습니다. 그러나 런타임시 변형 목록에 객체 유형을 추가해야하는 것처럼 보입니다. 나는 앞서 디렉토리에서 개체 유형을 알고있다하더라도, 그것은 Typelist
다른 DIRS 다릅니다
template <typename Typelist>
struct Object<Typelist> {
std::string name;
boost::variant<Typelist> objects;
};
이 될 것입니다. 그런 다음 dirs의 dir을 갖는 것은 유형 목록의 동적 결합입니다. 그것은 복잡해 보입니다. 그리고 곧 50 가지 변형 유형의 한계에 부딪 칠 것입니다. 대안은 Boost :: Any로 의미를 단순화합니다. 하지만 객체 세트를 반복하고 싶습니다. 각 객체는 boost :: fusion adapt_struct입니다. 각 객체의 각 멤버에 fusion :: for_each를 표시하고 싶습니다. 어떤 대안이나 제안?
디렉토리의 임의 항목을 모델링하는 기본 클래스는 옵션이 아니겠습니까? 그런 다음 특수 오브젝트에 대한 shared_ptr 또는 일반 포인터를 유지 한 다음 액세스 할 때이를 캐스트 할 수 있습니다. –
그것은 옵션 중 하나입니다. 그러나 일단 기본 클래스를 저장하고 나면, 어떤 타입의 타입을 사용할 수 있는지, 어떻게 실제 타입으로 유용한 것을 하는지를 아는 것이 중요합니다. typeinfo를 저장하는 것이 static_cast (t)을 할 수있는 것처럼 보이지 않습니다. 여기서 "T"가 필요합니다. –
surfcode