
Ion Gaztañaga <igaztanaga <at> gmail.com> writes:
El 15/03/2012 23:18, Olaf van der Spek escribió:
2012/3/15 Ion Gaztañaga<igaztanaga <at> gmail.com>:
El 15/03/2012 3:14, Joel Young escribió:
Can the interprocess::basic_string be modified to allow these conversions?
I hate having to do:
key_val = "fruitcake"; db.find(key_val);
place the string in shared memory. I don' think it could be implicitly constructible from char* or std::string.
My code above used the assignment operator to convert it. The constructor can do it also. If not, then at least provide a convenience function to do it!
But there's no (good) reason for the input to be required to be in shared memory.
Exactly. I've got my container in the mapped file or shared memory. Why should I want to clutter up the shared memory with a temporary? Especially if I'm just doing a find in a read-only chunk of memory!
A shared memory allocator is designed to allocate from a managed shared memory segment. And this requires a base address of that shared memory segment . And even with std::string you need to build a temporary string to compare it with the ones stored in the container.
But the temporary string isn't used for anything! I create a temporary string, allocated into a DIFFERENT memory pool and it works just fine. If I can create an arbitrary basic_string with an allocator to a random place to serve as a temporary, the library can darn well do it too! Joel