C++ 使用整数标识符在共享内存上构造对象
当我查看boost进程间库的示例时,对象总是用字符串名构造的C++ 使用整数标识符在共享内存上构造对象,c++,visual-c++,boost,boost-interprocess,C++,Visual C++,Boost,Boost Interprocess,当我查看boost进程间库的示例时,对象总是用字符串名构造的 segment.construct<Equipments>("name")("param1", "param2"); section.construct(“名称”)(“参数1”、“参数2”); 是否可以用整型标识符构造对象,如 segment.construct<Equipments>(123)("param1", "param2"); section.construct(123)(“param1”、“p
segment.construct<Equipments>("name")("param1", "param2");
section.construct(“名称”)(“参数1”、“参数2”);
是否可以用整型标识符构造对象,如
segment.construct<Equipments>(123)("param1", "param2");
section.construct(123)(“param1”、“param2”);
为什么要这样做?在任何情况下,你都可以用一种“有点”肮脏的方式:
segment.construct<Equipments>((char*)123)("param1", "param2");
section.construct((char*)123)(“param1”、“param2”);
只要您的平台(在Win32/Win64上)上的sizeof(char*)>=sizeof(int),指针就可以安全地转换回整数,而不会丢失信息。只需确保不要将指针值用作有效的char*
指针
哦,您必须确保底层库代码不会尝试将该值用作有效的字符指针。谢谢,它可以工作。实际上,我不想用字符串标识符存储对象。我想知道我是否能用整数标识符使它们恼火;boost::进程间::细节::char_ptr_holder t(&x);段。构造(t)。。。它适用于聊天,但不适用于整数类型。嗯,
char
只是一个范围非常有限的整数(通常为-128..127有符号,0..255无符号)。所以,只要你的ID不是太大,这也会起作用。