Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用boost_any时是否可以避免开销?_C++_Boost_Casting_Boost Any - Fatal编程技术网

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
确实是正确的类型,并且你总是知道实际的类型,那么你可以制作一个空指针的容器……你的容器的类型在哪里?也许你不应该这样做?因为它在运行时选择需要什么类型和不需要什么类型,我也不希望更改这个全局容器的代码,以防我需要其他类型。