2012-03-06 21 views
9

std::ref का उपयोग करने का सही तरीका क्या है? मैं VS2010 में कोड निम्नलिखित की कोशिश की और यह संकलन नहीं करता है:std :: ref का उपयोग कैसे करें?

#include <vector> 
#include <algorithm> 
#include <iostream> 
#include <functional> 
using namespace std; 
struct IsEven 
{ 
    bool operator()(int n) 
    { 
     if(n % 2 == 0) 
     { 
      evens.push_back(n); 
      return false; 
     } 

     return true; 
    } 

    vector<int> evens; 
}; 
int main(int argc, char **argv) 
{ 
    vector<int> v; 
    for(int i = 0; i < 10; ++i) 
    { 
     v.push_back(i); 
    } 

    IsEven f; 
    vector<int>::iterator newEnd = remove_if(v.begin(), v.end(), std::ref(f)); 
    return 0; 
} 

त्रुटियाँ:

c: \ प्रोग्राम फ़ाइलें (x86) \ माइक्रोसॉफ्ट विजुअल स्टूडियो 10.0 \ vc \ शामिल \ xxresult (28): त्रुटि C2903: 'परिणाम': प्रतीक न तो एक वर्ग टेम्पलेट है और न ही एक फ़ंक्शन टेम्पलेट

सी: \ प्रोग्राम फ़ाइलें (x86) \ माइक्रोसॉफ्ट विजुअल स्टूडियो 10.0 \ vc \ include \ xxresult (28): त्रुटि C2143: वाक्यविन्यास त्रुटि: गायब ';' पहले '<'

प्लस कुछ और ...

+0

यह साथ संकलित जी ++ (4.6 और 4.8 दोनों)। – kennytm

+0

@nabulke: यहां तक ​​कि सी ++ 11 में भी? मैंने सोचा कि यह काम करना चाहिए .. – Asha

उत्तर

8

std::ref के विज़ुअल सी ++ 10.0 कार्यान्वयन में बग या बग का सेट है।

यह दृश्य सी ++ 11 के लिए तय किया गया है; मेरा earlier question about it देखें। माइक्रोसॉफ्ट पर

एसटीएल thusly उत्तर दिया: "हम पहले से ही यह तय हो गया है, और ठीक VC11 आरटीएम में उपलब्ध हो जाएगा (हालांकि, ठीक VC11 बीटा में नहीं मिला।)।"

4

मैं VS2010 के साथ एक ही संकलन त्रुटि प्राप्त और std::unary_function से इनहेरिट द्वारा यह सही:

struct IsEven : std::unary_function<int, bool> 

मैं केवल result को यह कारण माना त्रुटि संदेश में दिख रहा है। मैं केवल अनुमान लगा सकते हैं कि std::ref, VS2010 में, typedef रों पर unary_function में निर्भर करता है:

template <class Arg, class Result> 
    struct unary_function { 
    typedef Arg argument_type; 
    typedef Result result_type; 
    }; 

संपादित करें: VS2010 में बग के बारे में Cheers and hth. - Alf से

जवाब देखें।

+0

यह अब और आवश्यक नहीं होना चाहिए। एक बग फाइल करें। – pmr

+0

इस के साथ संकलित एक बार ..interesting .. – Asha

संबंधित मुद्दे