c++ - inserción de ptr_map
boost types (1)
Esta versión de insert
toma la clave por referencia no constante, lo que significa que no puede usar un valor temporal como primer valor. Esto es para evitar fugas de memoria; en su código, la temp
se filtraría si el constructor de cadenas arrojara.
Debe crear el objeto clave antes de crear el puntero sin formato:
string key("SomeKey");
any* temp = new whatever;
SomeMap.insert(key, temp);
o use un auto_ptr
para asegurarse de que el objeto sea eliminado pase lo que pase:
auto_ptr<any> temp(new whatever);
SomeMap.insert("SomeKey", temp);
Tengo un tipo predefinido que hereda boost :: noncopyable (así que tengo que guardar el puntero en estos objetos). Yo uso un impulso :: ptr_map . Como sé, el segundo argumento ya es un puntero. Entonces, el código:
ptr_map<string, boost::any> SomeMap;
typedef %Some noncopyable class/signature% NewType;
// Inserting now
boost::any *temp = new boost::any(new KeyEvent());
SomeMap.insert("SomeKey", temp);
El error es:
error: no matching function for call to ''boost::ptr_map<std::basic_string<char>, boost::any>::insert(const char [11], boost::any*&)''
UPD : cuando no paso el puntero a cualquier any temp = any(new KeyEvent());
Yo obtengo:
error: no matching function for call to ''boost::ptr_map<std::basic_string<char>, boost::any>::insert(const char [11], boost::any&)''