需要对boost::mpl进行解释
need explanation on boost::mpl
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 );
我不明白折叠的工作方式,为什么是int_<0>?为什么is_float<<strong>_2> ?
有人能给我一些线索来理解这个"函数"吗?由于
int_<0>
是用于折叠的累加器的起始值。试着使用int_<1>
,看看会发生什么。
第三个实参是用于折叠序列的操作符。这需要是一个二元元函数。if_< is_float<_2>,next<_1>,_1 >
被转换成一个有两个参数的lambda表达式,其中_1和_2分别指该lambda表达式接受的第一个和第二个参数。
如果if_
的第二个参数是float
,则谓词is_float<_2>
返回true。_2
是占位符。占位符指的是模板专门化的第n个参数。
next<_1>只是返回当前状态的下一个值(例如next<int_<0>> == int_<1>
)。
如果谓词返回false,则返回未改变状态的_1。
先试着理解折叠是什么,然后再试着理解boost::mpl的操作方法。
一个简单的练习是编写一个返回向量长度的fold。
相关文章:
- 请解释"函数1(p1,p2,p3);"的输出
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 被解释为低级别const的const对象的地址
- 计算每个节点的树高,帮助我解释这个代码解决方案
- MSVC将仅移动结构参数解释为指针
- 内联程序集printf将整数解释为地址
- 有人能解释一下为什么下界是这样工作的吗C++的
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- 我是c ++的新手,你能解释一下在这种情况下的指针吗
- 有人能为我解释一下C++代码吗
- 你能解释一下什么运行时错误是如何解决它的吗?
- 请解释字谜的代码,我看不懂计数器数组,每个值已经是0
- 有人可以向我解释为什么控制台输出 0 吗?
- 有人可以解释一下这段代码如何能够反转字符串
- 在 C++ 中解释多维向量的语句时感到困惑
- 解释一下 for (char c : str) 的作用?
- 确切地说,如何解释 std::getline(stream, string) 函数在C++中填充的字符串
- 隐式重新解释引用时强制转换,没有警告/错误
- 有人可以在 c++ 中解释数组的这种输入
- 需要对boost::mpl进行解释