我有一段代码,其中我使用boost::unsafe_any_cast<void*>(&boost::any anyInstance)
获得boost::any
对象的内容指针。
代码如下:
boost::any staticResult; //contains a private pointer called content
f(staticResult); //makes the content pointer a null pointer
void* voidStaticResult = boost::unsafe_any_cast<void*>(&staticResult);
不幸的是,调试时,我看到staticResult中的内容指针为NULL(0x00000000),而voidStaticResult为0x00000004。
(显然没有理由。您有任何想法吗?)
编辑:函数f()调用一个dll创建一个对象的实例。该实例由staticResult的内容指针指向。我需要将指针传递给另一个函数,但是在我看来,没有简单的方法可以“广播” boost :: any指向实例化类的指针。任何其他解决方案都很好。
答案 0 :(得分:2)
任何演员可能都不安全,仅对非空演员有效。这是不安全且未经检查的。
通常将任何东西实现为内存块的指针,该内存块中有一个vtable,后跟对象实例。因此,要获得指向该对象的指针,请在构建的任何内部指针4上添加sizeof(vtable ptr)。