【发布时间】:2010-06-22 04:29:28
【问题描述】:
具体来说,有没有办法让 phoenix 表达式按照 std::unary_function 概念的预期暴露 result_type 类型? boost::transform_iterator 似乎期待这一点,从查看它的 src 来看,我没有看到一个简单的解决方法。
这里有一些代码可以重现我遇到的问题:
#include <boost/iterator/transform_iterator.hpp>
#include <boost/spirit/home/phoenix.hpp>
#include <numeric>
#include <iostream>
using namespace boost::phoenix;
using namespace boost::phoenix::arg_names;
int main(void){
int i[] = {4,2,5,3};
std::cout <<
std::accumulate(
boost::make_transform_iterator(i, _1*_1),
boost::make_transform_iterator(i+4, _1*_1),
0
) << std::endl;
return 0;
}
编译此错误消息的相关部分是(gcc 4.3.4,boost 1.43):
/usr/include/boost/iterator/transform_iterator.hpp:43: error: no type named ‘result_type’ in ‘struct boost::phoenix::actor<...
我对 boost::lambda 有同样的问题(缺少 result_type)。我以为我在过去看到过 make_transform_iterator 和 lambda 的类似用法,现在我想知道是不是我想象出来的。
在 phoenix 或 lambda 中是否有提供的包装器或其他机制来暴露 result_type?
【问题讨论】:
标签: c++ boost boost-lambda boost-phoenix