문제

부스트 :: 변형 값 유형이라고 주장합니다. 이것은 단순히 부스트 :: 변형의 원시 표현을 작성하고 포드 유형 만 포함하는 한 나중에 다시로드하는 것이 안전하다는 것을 의미합니까? 동일한 아키텍처에서 동일한 컴파일러와 동일한 버전의 BOOST에서 컴파일 된 코드로 다시로드 될 것이라고 가정하십시오.

또한 (아마도) 동등하게, 부스트 :: 변형을 공유 메모리에 사용할 수 있습니까?

도움이 되었습니까?

해결책

직렬화와 관련하여 : 작동해야합니다. 하지만 왜 사용하지 않습니까? boost::variant변형에 포함 된 실제 유형을 작성하는 방문 메커니즘?

struct variant_serializer : boost::static_visitor<void> {
    template <typename T>
    typename boost::enable_if< boost::is_pod<T>, void>::type
    operator()( const T & t ) const {
        // ... serialize here, e.g.
        std::cout << t;
    }
};

int main() {

    const boost::variant<int,char,float,double> v( '1' );

    variant_serializer s;
    boost::apply_visitor( s, v );

    return 0;
}

공유 메모리에 관한 : boost::variant 힙 할당을 수행하지 않으므로 공유 메모리에 배치 할 수 있습니다. int, 물론 적절한 동기화를 가정합니다.

말할 것도없이, 당신이 말했듯이, 위는 변형에 POD 유형 만 포함 할 수있는 경우에만 유효합니다.

다른 팁

부스트/직렬화/variant.hpp를 포함하여 시도하십시오. 그것은 당신을 위해 일을합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top