직렬화 관련 : 예, 작동합니다. 그런데 변형에 포함 된 실제 유형을 쓰려면 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;
}
: 당신은 단지 int
처럼 공유 메모리에 배치 할 수 있도록 boost::variant
은 물론, 적절한 동기화를 가정, 힙 할당을 수행하지 않습니다.
당신이 말한 것처럼 말할 필요도없이, 변형은 POD 유형 만 포함 할 수있는 경우에만 유효합니다.
POD의 구조 일지라도 원시 메모리 표현을 사용하지 않는 것은 좋지 않은 생각이며 컴파일러의 패딩 레이아웃, 아키텍처 세부 정보 및 엔디안을 자비로 생각할 수 있습니다. – Thanatos
당시 나는 레이아웃의 차이점이 전혀 문제가되지 않을 공유 메모리 사용에 더 관심이있었습니다. – bdonlan