Dear everyone,
I've just begun learning to use IPC in boost. Here I want to create a vector of vector<std::complex<double>>, that is to say, a matrix of complex.
I read the section "containers of containers" in manual, and try to write something as the following:
#include <boost/interprocess/containers/vector.hpp>
#include <boost/interprocess/allocators/allocator.hpp>
#include <boost/interprocess/managed_shared_memory.hpp>
#include <complex>
typedef boost::interprocess::allocator<std::complex<double>, boost::interprocess::managed_shared_memory::segment_manager> ComplexAllocator;
typedef boost::interprocess::vector<std::complex<double>,ComplexAllocator> ComplexVector;
typedef boost::interprocess::allocator<ComplexVector, boost::interprocess::managed_shared_memory::segment_manager> ComplexVectorAllocator;
typedef boost::interprocess::vector<ComplexVector,ComplexVectorAllocator> ComplexMatrix;
int main ()
{
struct shm_remove
{
shm_remove() { boost::interprocess::shared_memory_object::remove("MySharedMemory"); }
~shm_remove(){ boost::interprocess::shared_memory_object::remove("MySharedMemory"); }
} remover;
boost::interprocess::create_only_t tag;
boost::interprocess::managed_shared_memory segment(tag,
"MySharedMemory",
65536);
const ComplexVectorAllocator alloc_inst (segment.get_segment_manager());
ComplexMatrix *m =
segment.construct<ComplexMatrix>
("M")(alloc_inst);
m->resize(4);
segment.destroy<ComplexMatrix>("M");
return 0;
}
However, it could not compile. And the error message is too long for me to understand. Is there anyone knowing how to fix this?