2013-07-04 22 views
0

我在内存管理器模板中使用dynamic_cast<void*>来获取对象的实际地址。 但是对于不是多态的类型,不允许使用dynamic_cast。 是否有更通用的方式,还是我需要两个版本的模板?universal dynamic_cast <void*>等价于多态而不是多态类型

+0

有任何指针对象类型的**隐式**转换为*指向cv-qualified void *的指针;然而,不能保证产生“真实地址”(不管是什么)。由[conv.ptr]/2保证,结果空指针“代表与原始指针值相同的字节在内存中的地址” – dyp

+0

@DyP:根本没有任何帮助。 – Xeo

+0

@Xeo Huh?它有助于将指向对象的指针转换为无效指针,如果这是OP所需的。 – dyp

回答

2

您可以使用std::is_polymorphic对两种可能性进行编译时切换。

+0

这不是C11也不是推动项目。 – aak

+0

你可以自己重新实现它,它不需要编译器的魔力,只是有点怪异的代码。 –

+0

@SebastianRedl:你是怎么做的?从具有空类的类型派生并检查派生类的大小是否大于基类的大小(意味着额外的虚表指针)? – Xeo