< अद्यतन > मेरे लिए सामान्य रूप से, सवाल गलत था। वास्तविक सवाल यह है: UnaryFunc :: result_type को सीधे एक्सेस करने के बजाय, वापसी प्रकार निर्धारित करने के लिए रूपांतरण परिणाम_of <> मेटाफंक्शन का उपयोग नहीं करता है। चारों ओर एक काम के साथ एक जवाब पोस्ट किया। </अपडेट >बूस्ट :: transform_iterator के साथ फीनिक्स अभिव्यक्ति का उपयोग कैसे करें?
विशेष रूप से, वहाँ एक फोनिक्स अभिव्यक्ति एक result_type
प्रकार का पर्दाफाश के रूप में std :: unary_function अवधारणा के लिए उम्मीद करने के लिए एक तरीका है? boost :: transform_iterator यह अपेक्षा करता है, और इसके स्रोत को देखने से, मुझे चारों ओर एक साधारण काम नहीं दिख रहा है।
यहाँ कुछ कोड है कि समस्या मैं कर रहा किया गया है reproduces है:
#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;
}
इस संकलन से त्रुटि संदेश के प्रासंगिक भाग है (जीसीसी 4.3.4, को बढ़ावा देने के 1.43):
/usr/include/boost/iterator/transform_iterator.hpp:43: error: no type named ‘result_type’ in ‘struct boost::phoenix::actor<...
मुझे बूस्ट :: लैम्बडा (result_type
गुम) के साथ एक ही समस्या है। मैंने सोचा कि मैंने अतीत में make_transform_iterator और lambda के लिए समान उपयोग देखा था, अब मैं सोच रहा हूं कि मैंने अभी कल्पना की है या नहीं।
क्या result_type
का पर्दाफाश करने के लिए फीनिक्स या लैम्ब्डा में एक प्रदान किया गया रैपर या कुछ अन्य तंत्र है?