2011-03-21 11 views
5

मैं इस बेवकूफ लगता है, लेकिन (कार्य निर्देशिका एक से अधिक आइटम होना चाहिए) इस सरल उदाहरण देखें:बूस्ट :: फाइल सिस्टम :: directory_iterator की एक प्रति कैसे बनाएं?

#define BOOST_FILESYSTEM_VERSION 3 
#include <boost/filesystem.hpp> 
#include <cassert> 

int main() 
{ 
    using namespace boost::filesystem; 
    directory_iterator it("./"); 
    directory_iterator it_copy = it; 
    ++it; 
    assert(it_copy != it); 
    return 0; 
} 

it_copyit के साथ एक साथ संशोधित किया गया है! (1.45 को बढ़ावा दें) इस तरह के डिजाइन के लिए क्या विचार हो सकते हैं (directory_iterator स्मार्ट पीआरटी की तरह कुछ है)?

मुझे इसे बाद में उपयोग करने के लिए directory_iterator की एक प्रति सहेजने की आवश्यकता है।

उत्तर

6

यदि आप reference पर एक नज़र डालते हैं तो आप देखेंगे कि इसे boost::single_pass_traversal_tag माना जाता है।

यह एसटीएल में Input Iterator के बराबर (बूस्ट टर्मिनोलॉजी में) है (इसे नेटवर्क कनेक्शन से पैकेट देने वाले इटरेटर के रूप में सोचें, आप रिवाइंड नहीं कर सकते हैं)।

यह भी ध्यान रखें (यह एक ही पृष्ठ से):

i == j कि ++i == ++j संकेत नहीं करता है।

इस बिंदु पर, कोई आश्चर्यचकित हो सकता है कि इसकी प्रतिलिपि क्यों बनाई जा सकती है। कारण यह है कि एसटीएल एल्गोरिदम ने प्रतिलिपि द्वारा अपने तर्क लेते हुए मानदंड निर्धारित किया है। इसलिए अगर यह कॉपी नहीं किया जा सका तो एसटीएल एल्गोरिदम के साथ प्रयोग योग्य नहीं होगा।

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