我读boost源代码笔记 第五篇 quote.hpp

本文探讨了如何使用quote1将元函数转换为元函数类,解决了元函数不能作为参数传递的问题。通过实例展示了元函数类的应用,并深入解析了quote1的实现原理。

quote的作用是把一个metafunction,变换成为一个metafunction class,我们都知道,metafunction是无法进行传递的。例如我们有一个metafunciton AddPointerMetaFunction作用是添加指针

template
struct AddPotionerMetaFunction
{
	typedef T* type;
};

 

我们还有一个metafunction DoubleTime的一个参数是另外一个metafunction,并把它执行两次如:

template
struct DoubleTime
{
	typedef typename T::type inner;
	typedef typename T::type type;
};

但是我们没有办法把一个metafunction传递给另外一个metafunction,因为metafunction必须要指定参数,这是已经实化了

如一下代码是错误的

 

DoubleTime<AddPointerMetaFunction<int>,int>::type;

而正确的办法是

struct AddPointerMetaFunctionClass
{
	template 
	struct apply
	{
		typedef typename AddPoinerMetaFunction::type type;
	};
};

template
struct DoubleTime
{
	typedef typename T::apply::type inner;
	typedef typename T::apply::type type;
};

DoubleTime::type; //type is int**

 

我们可以看出metafunction class的必要性,而quote就是把metafunction变成metafunction class,因此上面的代码的效果等同于

如下面的代码

 

 

DoubleTime<boost::mpl::quote1<AddPointerMetaFunction>, int>::type; //type is int**

其中quote1指AddPointerMetaFunction只有一个输入参数。quoten表示输入的metafunction有n个参数

了解了quote的作用后我们来看看具体怎么样实现的

如果按照前文的编译器,我们可以从

boost/mpl/aux_/preprocessed/plain/quote.hpp line14~41

中找到相应的quote的源代码。我们仅仅通过阅读quote1的实现,可以得到quoten的实现方法

 

 

 

template< typename T, bool has_type_ >
struct quote_impl
    : T
{
};

template< typename T >
struct quote_impl< T,false >
{
    typedef T type;
};

template<
      template< typename P1 > class F  // 值得注意的声明方式,代表了一个metafunction
    , typename Tag = void_
    >
struct quote1
{
    template< typename U1 > struct apply

        : quote_impl<
              F
            , aux::has_type< F >::value
            >

    {
    };
};
其中注意看上面代码中注释那行,这个是唯一巧妙的地方
代码下载链接: https://pan.quark.cn/s/a4b39357ea24 全球数据治理的发展趋势; 数据合规相关的法规标准以及重点案例的收集; 数据安全领域的标准与产业应用实践; 数字转型时代中数据流转所面临的风险控制; 运用人工智能技术进行的大数据安全保障; 各类厂商提供的数据安全防护措施; 完整的数据治理总体方案; 针对数据安全的治理解决方案; 【行业权威机构推荐】数据安全治理的建设指导手册; 企业数据防止信息泄露的体系化咨询服务完整资料; 阿里云在大数据安全方面的实践经验分享; 大数据安全等级保护过程中遇到的挑战及应对策略; 以风险为基础的数据完整性管理实践指导文件; 数据安全管理的相关法规条例; CSA组织发布的大数据安全与隐私保护手册中文翻译版本; GDPR框架下的数据合规性要求; 通过数据资产管理视角探讨数据安全监管; 大数据安全治理的汇编资料(共计四篇); 大数据安全的相关标准规范; 大数据应用场景中的隐性隐私安全隐患; 大数据应用环境下的隐私保护及风险控制技术; 数字化时代背景下的隐私保护策略; 等级保护2.0标准下的数据安全解决方案; 国际上通用的数据管理能力成熟度评估模型; 华为公司在大数据安全管理方面的实践经验; 企业数据安全能力体系框架_数据安全能力成熟度模型的构建与实际应用; 企业数据管理领域的理论知识和实践操作; 从零开始构建企业数字化运营全流程白皮书; 数据安全领域的权威白皮书; 数据安全能力建设的实施指导手册; 数据安全治理领域的白皮书及配套演示文稿; 数据安全治理的具体实施方案; 数据安全的多维度综合防御体系; 数据跨境传输的安全解决方案; 数据安全治理的技术支撑架构; 金融行业数据安全治理模型及实践案例; 涵盖但...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值