博客
关于我
C++通用Functor仿函数 LOKI库中的模版使用以及设计新思维
阅读量:798 次
发布时间:2023-04-04

本文共 924 字,大约阅读时间需要 3 分钟。

TypeList 是一个用于定义复合类型的工具,可以将多个类型嵌套在一起。通过使用 TYPELIST_1 到 TYPELIST_20 的宏定义,可以灵活定义不同数量的类型链表。例如,string、int、int 可以表示为 TypeList<string, TypeList<int, NullType>>。这些宏定义通过递归的方式生成复合类型,使得类型定义更加简洁和灵活。

EraseAll 是一个用于消除不需要的类型部分的工具。它通过递归处理 TypeList 的结构,删除多余的 NullType 或其他不需要的类型,返回一个简化的 TypeList。例如,EraseAll<TempList, NullType> 可以将复杂的 TypeList<int, TypeList<int, NullType>> 转换为 TypeList<int, NullType>。

TypeSelect 是一个类型萃取器,用于根据特定的条件从复合类型中提取特定的部分。它通过模板偏特化来实现,例如,根据是否是引用类型、指针类型等条件,返回相应的结果类型。这种工具在类型转换和复杂类型处理中非常有用。

TypeAt 是一个用于获取 TypeList 中指定位置的类型的工具。它通过递归的方式处理 TypeList,直到找到指定位置的类型。如果位置超出了范围或不存在对应的类型,TypeAt 会返回一个默认类型(通常是 NullType)。这种工具在处理嵌套的 TypeList 时非常有用,可以帮助开发者快速定位和获取特定位置的类型信息。

TC_Functor 是一个通用的仿函数封装类,能够封装各种函数对象、函数和成员函数的调用。它通过 TypeList 定义参数的类型,并使用 TypeSelect 和 TypeAt 获取参数的具体类型信息,然后根据这些信息进行函数调用。TC_Functor 的实现涉及多个模板类,分别处理不同数量的参数,确保函数能够正确地被调用。

总体来看,LOKI 库提供了一套强大的数据结构和工具,能够帮助开发者轻松处理复杂的类型结构,并创建通用的仿函数。理解这些工具的原理和使用方法,对于深入掌握 C++ 的元编程能力非常有帮助。

转载地址:http://xsrfk.baihongyu.com/

你可能感兴趣的文章
Oracle数据库学习(三)
查看>>
TypeError: create_purple() 接受 0 个位置参数,但给出了 2 个
查看>>
Oracle数据库异常--- oracle_10g_登录em后,提示java.lang.Exception_Exception_in_sending_Request__null或Connection
查看>>
Oracle数据库异常---OracleDBConsoleorcl无法启动
查看>>
oracle数据库异常---SP2-1503: 无法初始化 Oracle 调用界面 SP2-1503: 无法初始化 Oracle 问题的解决办法
查看>>
Oracle数据库性能调优
查看>>
oracle数据库核心笔记
查看>>
oracle数据库笔记---oracleweb视图使用流程,及plsql安装
查看>>
oracle数据库笔记---pl/sql的基础使用方法
查看>>
Transformer 架构解释
查看>>
Oracle数据库表空间 数据文件 用户 以及表创建的SQL代码
查看>>
oracle数据库零碎---Oracle Merge 使用,表中存在数据就修改,没有数据自动添加
查看>>
Oracle数据库验证IMP导入元数据是否会覆盖历史表数据
查看>>
oracle数据插入表,oracle同时向多表插入数据
查看>>
oracle数据类型和对应的java类型
查看>>
【C++进阶篇】——string类的使用
查看>>
Oracle未开启审计情况下追踪表变更记录
查看>>
Oracle条件查询
查看>>
Oracle查看数据库会话连接
查看>>
Oracle查询前几条数据的方法
查看>>