C++ 使用boost_any时是否可以避免开销?
我想使用C++ 使用boost_any时是否可以避免开销?,c++,boost,casting,boost-any,C++,Boost,Casting,Boost Any,我想使用boost::any作为通用类型存储在容器中并传递到不同的函数。但是在这些函数中,我总是知道真正的类型,所以在运行时我不需要任何类型安全检查和强加的开销,static\u cast就足够了 理想的解决方案是使用类似于boost::polymorphic_downcast,但正如我所见,它不能应用于这种情况 我应该为void*编写我自己的包装,还是有其他选择?您可以使用shared\u ptr或unique\u ptr和static\u cast替换boost::any,shared\u
boost::any
作为通用类型存储在容器中并传递到不同的函数。但是在这些函数中,我总是知道真正的类型,所以在运行时我不需要任何类型安全检查和强加的开销,static\u cast
就足够了
理想的解决方案是使用类似于boost::polymorphic_downcast
,但正如我所见,它不能应用于这种情况
我应该为
void*
编写我自己的包装,还是有其他选择?您可以使用shared\u ptr
或unique\u ptr和static\u cast
替换boost::any
,shared\u ptr
与原始void*
指针相比有以下几个优点:
- 自动删除其存储
- 可以被代码中的多个对象引用(可能不需要)
如果共享对您不利,并且您的对象将只在容器中拥有,那么您也可以使用
unique\u ptr
如果您在编译时知道类型,为什么需要boost::any
?你不能使用一个包含你需要的所有类型的结构,把它放在一个容器中吗?@TonyTheLion:那不是内存效率很低吗?如果any
确实是正确的类型,并且你总是知道实际的类型,那么你可以制作一个空指针的容器……你的容器的类型在哪里?也许你不应该这样做?因为它在运行时选择需要什么类型和不需要什么类型,我也不希望更改这个全局容器的代码,以防我需要其他类型。