QVariant vs boost::any vs boost::variant
QVariant vs boost::any vs boost::variant
我需要有效的方法来存储不同类型的值(int,float,qString或std :: string,bool),例如qvariant等"通用"容器。
我想归档更少的内存使用。
我更喜欢一个不存储内部值类型的容器,因为它是开销。
我应该使用哪一个?
boost::any
可以保持任何类型的值,但是您必须知道它可以保持什么才能提取值,并为存储值分配内存。
boost::variant
只能存储一组指定类型的值,您可以轻松找出其所持的内容,boost::variant
的sizeof
将是它包含的最大值类型的sizeof
存储值的类型是因为它不使用堆内存(除非使用递归变体)。
从内存使用情况下,视图boost::variant
的观点角度可能更有效,因为它不使用堆内存。另外,boost::variant
比boost::any
更具有类型的安全性,编译器可以在编译时间为您找到更多错误。
我大约一年前都面临着类似的问题。我不记得推理,但我已经助长了:有。提升:任何确实存储可用于以欲望格式检索值的TypeID。
这是一个示例:
#include <iostream>
#include <boost/any.hpp>
#include <string>
int main()
{
boost::any value;
for(int i=0; i < 3; i++)
{
switch (i)
{
case 0:
value = (double) 8.05;
break;
case 1:
value = (int) 1;
break;
case 2:
//std::string str = "Hello any world!";
//value = str;
value = std::string("Hello any world!");
break;
}
if(value.type() == typeid(double))
std::cout << "it's double type: " << boost::any_cast<double>(value) << std::endl;
else if(value.type() == typeid(int))
std::cout << "it's int type: " << boost::any_cast<int>(value) << std::endl;
else if(value.type() == typeid(std::string))
std::cout << "it's string type: " << boost::any_cast<std::string>(value) << std::endl;
}
return 0;
}
希望这会有所帮助!
相关文章:
- VS Code C++:不准确的系统包括路径错误(wchar.h,boost/lambda/lambda.hpp)
- 如何使用VS 2015构建Boost 1.44
- Boost::ASIO VS Qt networking
- 在 VS Code 上使用 Boost
- C 带有两个线程的boost async_read vs
- 修改Boost多索引项的非索引字段的最佳方法:modify vs mutable
- 如何与CMAKE一起使用VS 2017编译的Boost Filesystem库
- boost::asio::write() VS socket->write_some()
- 如何初始化boost :: edge_weight_t类型在vs vs c 上
- 如何修复与Xtime的Boost和Vs相互冲突的定义有关的编译器错误
- C++性能:模板vs boost.any
- QVariant vs boost::any vs boost::variant
- Qt vs Boost 文件系统递归文件计数
- 在VS 2010上使用boost::interprocess生成代码问题
- boost::interprocess::named_mutex vs CreateMutex
- boost::fusion::zip function vs boost::fusion::zip_view
- c++ boost::bind vs clojure partial function
- boost::asio vs. libpcap:避免两次调用关闭
- boost::format vs sprintf
- boost vs POCO关于学习曲线和初学者适用性(HTTP客户端)