gpt4 book ai didi

c++ - 需要关于 boost::mpl 的解释

转载 作者:行者123 更新时间:2023-11-30 03:07:33 24 4
gpt4 key购买 nike

typedef vector<long,float,short,double,float,long,long double> types;
typedef fold<
types
, int_<0>
, if_< is_float<_2>,next<_1>,_1 >
>::type number_of_floats;

BOOST_MPL_ASSERT_RELATION( number_of_floats::value, ==, 4 );

我不明白 fold 的工作方式,为什么是 int_<0>?为什么是_float<_2> ?

有人能给我一些线索来理解这个“功能”吗?谢谢

最佳答案

int_<0>是用于 fold 的累加器的起始值。尝试使用 int_<1>看看会发生什么。

第三个参数是用于 fold 序列的运算符。这需要是一个二进制元函数。 if_< is_float<_2>,next<_1>,_1 >转换为具有两个参数的 lambda 表达式,其中 _1 和 _2 指代此 lambda 表达式采用的第一个和第二个参数。

谓词is_float<_2>如果 if_ 的第二个参数返回真是 float . _2是一个占位符。占位符指的是模板特化的第 n 个参数。

next<_1> 仅返回当前状态的下一个值(例如 next<int_<0>> == int_<1> )。

如果谓词返回 false,我们只需返回 _1,即未改变的状态。

首先尝试理解 fold 是什么,然后尝试理解 boost::mpl 的实现方式。

一个简单的练习是编写一个返回 vector 长度的 fold 。

关于c++ - 需要关于 boost::mpl 的解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5763607/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com