<更新>和往常一樣,這個問題是錯誤的。實際的問題是:爲什麼transform_iterator不使用傳統的result_of功能來確定返回類型,而不是直接訪問UnaryFunc :: result_type。用解決方法發佈答案。 < /更新>如何在boost :: transform_iterator中使用phoenix表達式?
具體而言,是有一種方法,使一鳳表達露出result_type
類型作爲預期的標準:: unary_function概念? 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;
}
錯誤消息從編譯這樣做的relavent部分(GCC 4.3.4,提高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的類似用法,現在我想知道我是否只是想象它。
有沒有提供包裝或其他機制在鳳凰或lambda暴露result_type
?