- 浏览: 768935 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (1045)
- 数据结构 (36)
- UML与设计模式 (42)
- c++ (87)
- rust (36)
- Qt (41)
- boost模板元编程 (43)
- Linux (77)
- 汇编 (4)
- 其它 (2)
- 烹饪 (3)
- unix c / socket (73)
- 软件工程 (4)
- shell (53)
- Python (37)
- c++ primer 5th(c++11) (22)
- 数据库/MySQL (27)
- 数据存储 (4)
- lisp (7)
- git (4)
- Utility (3)
- CDN与DNS (54)
- Http (53)
- php (7)
- nginx/lua/openresty (41)
- redis (11)
- TCP/IP (16)
- 互联网 (6)
- kernel (2)
- go (34)
- 区块链 (43)
- 比特股 (13)
- 以太坊 (23)
- 比特币 (23)
- 密码学 (10)
- EOS (53)
- DAG (1)
- docker (1)
- filecoin (7)
- solidity (65)
- ipfs (8)
- 零知识证明 (1)
- openzeppelin (3)
- java (1)
- defi (7)
- Ton (0)
最新评论
any:是一种只能容纳一个元素的容器,但这个元素可以是任意类型(int,string,stl容器和任何自定义类型).程序可以用any保存任意的数据。
any不是一个模板类,本身不提供任何对内部元素的访问函数,而是使用了一个友元函数any_cast()
variant和any有点类似,是一种可变类型,它是一个模板类,允许保存的数据类型必须在模板参数列表中声明
any不是一个模板类,本身不提供任何对内部元素的访问函数,而是使用了一个友元函数any_cast()
#include<boost/any.hpp> #include<iostream> #include<vector> #include<boost/assign.hpp> #include<boost/shared_ptr.hpp> using namespace std; using namespace boost; template<typename T> void print(const T& t) { typename T::const_iterator iter; for(iter=t.begin();iter!=t.end();++iter){ cout << *iter << " "; } cout << endl; } int main() { any a(10); cout << any_cast<int>(a) << endl; a = string("abc"); cout << any_cast<string>(a)<<endl; vector<int> v,x; using namespace boost::assign; v = list_of(1)(2)(3); push_back(v)(4)(5); a = vector<int>(v); x = any_cast<vector<int> >(a); print(x); //any可以持有原始指针,但不安全,会内存泄漏。应该用智能指针,但auto_ptr不行,它特有的 //拷贝转移语义使得它不能被用作容器的元素 shared_ptr<int> p(new int(3)); a = p; cout << *any_cast<shared_ptr<int> >(a) << endl; } 10 abc 1 2 3 4 5 3
variant和any有点类似,是一种可变类型,它是一个模板类,允许保存的数据类型必须在模板参数列表中声明
#include<boost/variant.hpp> #include<iostream> using namespace std; using namespace boost; template<typename T> void var_print(T &v) { if(v.type()==typeid(int)){ get<int>(v); cout << v << endl; }else if(v.type()==typeid(string)){ cout << v << endl; }else{ try{ cout << "don't know" << endl; get<int>(v); }catch(bad_get &){ cout << "bad_get" << endl; } } } int main() { //1.4.2默认最多20个 typedef variant<int,double,string> var_t; var_t v; assert(v.type()==typeid(int));//type()用的是第一个:int assert(v.which()==0); v = "variant demo"; var_print(v); v = 2.1; var_print(v); } variant demo don't know bad_get
发表评论
-
multi_index_container
2018-08-11 13:04 462根据不同的类中不同的字段排序 #include < ... -
program_options读命令行和配置文件
2018-07-27 11:30 874#include <boost/program_opti ... -
centos下boost安装
2014-03-27 09:28 1069./booststarp.sh //这里的一些错误不用管 ... -
GC的改良
2013-10-17 22:05 584分代回收:对分配不久,诞生时间较短的“年龄”对象进行重点扫描, ... -
GC与引用记数
2013-10-16 21:57 703根(Root)就是判断对象是否可被引用的起始点。至于哪里才是根 ... -
boost 信号槽
2011-06-08 23:43 2327#include<boost/signals2.hp ... -
boost bind
2011-06-07 15:28 1691bind并不是一个单独的类或函数,而是非常庞大的家族,依据绑定 ... -
boost reference_wrapper
2011-06-05 21:07 1569reference_wrapper是一个引用类型的包装器 ... -
元编程
2011-06-02 22:46 937元编程的最大特点在于:某些用户自定义的计算可以在程序翻译期进行 ... -
参数化虚拟性
2011-06-02 22:17 868#include<iostream> usi ... -
traits
2011-05-30 16:43 794#include<iostream> usi ... -
动静多态
2011-05-30 15:40 1071由于继承||虚函数在运行期进程处理,这种多态叫动多态。 模板允 ... -
局部特化
2011-05-29 16:27 1037局部特化并不会引入一个新的模板,它只对原来模板(基本模板)进行 ... -
类模板与模板类
2011-05-29 16:08 7101.类模板:该类是一个模板,他代表的是:整个类家族的参数化描述 ... -
boost tuple
2011-05-27 15:03 1092tuple(元组):定义了一个有固定数目元素的容器,其中的每个 ... -
boost array
2011-05-27 00:06 935array本质上是一个对静态数组的包装,没有构造函数,不能指定 ... -
单元测试
2011-05-23 22:00 894test库提供了一个最小化的测试套件minimal test. ... -
boost StaticAssert
2011-05-23 21:42 943static_assert库把断言的诊断时刻由运行期提前到编译 ... -
boost正则表达式
2011-05-17 23:10 2804xpressive是boost的正则表达式库,它比boost. ... -
为什么模板要写在.h里面
2011-05-13 18:02 1113//test.h template<typena ...
相关推荐
与`std::any`不同,`variant`限制了可存储的类型,确保了类型安全。这意味着在访问`variant`内部的值时,编译器会进行类型检查,防止了运行时类型转换错误。 **1. 使用`boost::get` 访问** 这是最直接的访问方式,...
4. **高级用法**:`boost::any`还可以与其他Boost组件结合使用,比如`boost::variant`,以实现更复杂的类型管理和转换逻辑。 #### 五、总结 `boost::any`作为Boost库的一个重要组件,在需要处理多种类型数据的应用...
THE BOOST C++ LIBRARIES是一份自己编译的chm格式文档,描述了...14.4 Boost.Variant 14.5 Exercises Chapter 15: Error Handling 15.1 General 15.2 Boost.System 15.3 Boost.Exception Chapter 16: Cast Operators
9. 编程工具:如`boost::optional`表示可能为空的值,`boost::variant`可以存储多种类型的值,`boost::any`则可以存储任何类型的值。 10. 序列化:`boost::serialization`库允许将数据序列化为XML或二进制格式,...
此外,`boost::variant`和`boost::any`可以处理多种类型的数据。 6. **编译时元编程**:`boost.preprocessor`库提供了丰富的宏元编程工具,而`boost.type_traits`库则提供了类型属性检查和类型转换。 7. **序列化*...
- **数据结构**:熟悉Boost库中提供的各种高效数据结构,如元组、`Boost.Any`、`Boost.Variant`等。 - **错误处理**:掌握错误处理的最佳实践,包括`Boost.System`和`Boost.Exception`的使用方法。 - **类型转换操作...
- **Variant**:能够存储多种可能类型的值之一。 - **Tuple**:固定大小的复合类型,可以存储不同类型的数据成员。 ### 函数对象与高级编程 这部分讨论了Boost中用于支持函数式编程和高级编程模式的库。 - **Bind...
10. **其他实用工具**:可能还会介绍如`boost::variant`(多态数据类型)、`boost::any`(任意类型存储)以及`boost::mpl`(元编程库)等其他Boost组件。 通过阅读《Beyond The C++ Standard Library - An ...
7. **Boost.Any** 和 **Boost_variant**:存储任意类型数据的容器,增强了代码的灵活性。 通过学习这本书,读者不仅可以掌握C++11和C++14的现代编程技巧,还能深入了解Boost库的应用,提高编程效率,编写出更高效、...
这部分可能会讲解如何配置环境,如何编译和链接Boost库,以及如何开始使用一些基础的Boost组件,例如智能指针(shared_ptr、unique_ptr)和容器(如any、variant)。 开发手册则深入到Boost的各个模块,详细解释每...
5. **类型安全和错误处理**:Boost库的`boost::optional`、`boost::variant`和`boost::any`等组件增强了类型安全,使得程序更健壮。同时,`boost::spirit`库则提供了一种高级的解析器构造框架,有助于避免语法错误。...
包括Any(任意类型存储),Array(固定大小数组),Compressed_pair(压缩对),Dynamic_bitset(动态位集),Graph(图算法),Iterator(迭代器工具),MultiArray(多维数组),Multi-index(多索引容器),Range...
- **多态与类型安全**:通过`boost::variant`和`boost::any`等工具增强代码的灵活性与安全性。 ##### 3. 高级特性 - **元编程**:探索Boost.MPL和Boost.StaticAssert等元编程工具,实现更高级别的抽象和编译时计算...
在C++11标准下,由于没有内置的`std::variant`,开发者可能会使用第三方库,如Boost库中的`boost::variant`,或者其他自定义实现来达到类似的效果。这些早期实现通常会提供类似的API和功能,但可能没有C++17标准中的...
汉化 boost 文档,致力 boost 推广。 如果你对本项目有兴趣,欢迎加入,相关说明请查阅项目论坛: https://groups.google.com/ 到目前为止,各人贡献的译文如下: 贡献者 贡献的译文 alai04 accumulators, any, ...
Boost中的实用工具类简化了编程,例如`Boost.Any`可以存储任意类型的对象,而`Boost.Variant`则可以存储一组预定义类型的其中一个。 4. 容器和数据结构(Containers and Data Structures): Boost提供了一些灵活的...
- **Boost.Variant**:支持多种类型的联合体。 - **Boost.Tuple**:提供固定大小的元组类型。 #### Smart_ptr库 - **scoped_ptr**:拥有一个非共享资源的所有权,并在其作用域结束时自动释放资源。 - **scoped_...