我想使用boost::any
作为通用类型存储在容器中并传递给不同的函数。但是在这些函数中我总是知道真实的类型,所以在运行时我不需要任何类型安全检查和强加的开销,static_cast
就足够了。
理想的解决方案是使用类似boost::polymorphic_downcast
的内容,但正如我所见,在这种情况下无法应用。
我应该为void*
编写自己的包装器还是有其他选择?
答案 0 :(得分:1)
您可以使用shared_ptr<void>
或unique_ptr与static_cast
替换boost::any
,shared_ptr<void>
有一些优于原始void*
指针的优势,如:
但当然在这种情况下,每个指针需要更多内存(用于引用计数和删除)。
如果分享对您不利并且您的对象仅在容器中拥有,您也可以使用unique_ptr<void>
。