【问题标题】:Constructing object on shared memory with integer identifier使用整数标识符在共享内存上构造对象
【发布时间】:2010-11-03 09:46:37
【问题描述】:

当我查看 boost 进程间库的示例时,对象总是用字符串名称构造的。

segment.construct<Equipments>("name")("param1", "param2");

是否可以构造具有整数标识符的对象,例如

segment.construct<Equipments>(123)("param1", "param2");

【问题讨论】:

    标签: c++ visual-c++ boost boost-interprocess


    【解决方案1】:

    您为什么要这样做?无论如何,你可以用“有点”脏的方式来做:

    segment.construct<Equipments>((char*)123)("param1", "param2");
    

    只要在您的平台(在 Win32/Win64 上)上的 sizeof(char*) >= sizeof(int),指针就可以安全地转换回整数而不会丢失信息。请确保您没有将指针值用作有效的char* 指针。

    哦,您必须确保底层库代码不会尝试将该值用作有效的字符指针。

    【讨论】:

    • 谢谢,它有效。实际上我不想用字符串标识符存储我的对象。我想知道我是否可以用整数标识符来解决它们。
    • 我也试过 char x = 123; boost::interprocess::detail::char_ptr_holder t(&x); segment.construct(t)... 它适用于聊天,但不适用于整数类型。
    • 好吧,char 只是一个范围非常有限的整数(通常 -128..127 有符号,0..255 无符号)。只要您的 ID 不太大,这也可以使用。
    猜你喜欢
    • 1970-01-01
    • 2014-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    • 1970-01-01
    相关资源
    最近更新 更多