7

我正在使用一个外部库,它有一个接受 void* 的方法

我希望这个 void* 指向一个包含在 boost::any 对象中的对象。

是否可以获取 boost::any 对象的内容地址?

我正在尝试玩 myAny.content 但到目前为止还没有运气!我希望 dynamic_cast 或 unsafe_any_cast 的某种组合能给我我需要的东西。

谢谢!

4

2 回答 2

5

您可以使用boost::any_cast来获取指向基础类型的指针(前提是您在编译时知道它)。

boost::any any_i(5);

int* pi = boost::any_cast<int>(&any_i);
*pi = 6;

void* vpi = pi;
于 2012-06-28T14:09:13.677 回答
3

不幸的是,这是不可能的;boost::any_cast如果类型与包含的类型不同,将拒绝强制转换。

如果您愿意使用不受支持的内部 hack,则当前版本的标头有一个未记录且不受支持的函数boost::unsafe_any_cast(顾名思义),它绕过了以下执行的类型检查boost::any_cast

boost::any any_value(value);
void *content = boost::unsafe_any_cast<void *>(&any_value);

标题有这样的说法unsafe_any_cast

// Note: The "unsafe" versions of any_cast are not part of the
// public interface and may be removed at any time. They are
// required where we know what type is stored in the any and can't
// use typeid() comparison, e.g., when our types may travel across
// different shared libraries.
于 2012-06-28T14:44:53.873 回答