因为 gcc 4.9.0
已经 实现了 对类型不是 void
的 static_assert
,以正确符合标准。这很好,都是为了符合标准。
我有一个变体类型,将数据存储在 std::unique_ptr<void>
下,现在不起作用了。简单的解决方法是将其更改为 std::shared_ptr<void>
,然后它就可以直接编译了。更好的解决方法是提供删除器函数。
以下是修复 unique_ptr
的安全方法吗?对于某些多态类型,这会表现出未定义的行为吗?
#include <memory>
#include <iostream>
template<typename T>
void Deleter(void * p) {
delete reinterpret_cast<T*>(p);
}
int main() {
const std::unique_ptr<void, void(*)(void*)> v(new int(199), Deleter<int>);
std::cout << *reinterpret_cast<int*>(v.get()) << std::endl;
return 0;
}
boost::variant
或您自己的实现)?在我看来,应尽可能少地使用void*
。 - Sander De Dyckerstatic_cast
。 - Matt Clarksonstatic_cast
,你仍然没有摆脱困境。在void*
中,唯一有效的转换是T*
->void*
->T*
。如果你将其转换回原始类型之外的任何其他类型,那么你就会遇到麻烦。 - Matthieu M.