2015-11-01 7 views
7

साथ लगाकर की जरूरत नहीं है इस कोड (या live example) पर विचार करें:क्यों कुछ बूस्ट कार्यों नाम स्थान

#include <iostream> 

#include <boost/graph/adjacency_list.hpp> 
#include <boost/range/iterator_range.hpp> 

using std::cout; 

int main() { 
    boost::adjacency_list<boost::vecS, boost::vecS, boost::undirectedS> g; 

    add_edge(0, 1, g); 
    add_edge(1, 2, g); 

    for(auto v : make_iterator_range(vertices(g))) { 
    cout << v << " has " << degree(v, g) << " neighbor(s): "; 
    for(auto w : make_iterator_range(adjacent_vertices(v, g))) cout << w << ' '; 
    cout << '\n'; 
    } 
    return 0; 
} 

क्यों कार्यों add_edge, make_iterator_range, vertices, degree और adjacent_vertices कि बिना बूस्ट पुस्तकालय काम से आते हैं boost:: नामस्थान उपसर्ग?

मेरे लिए सबसे ज्यादा परेशान क्या है कि स्थिति के आधार पर, उपसर्ग वास्तव में कभी-कभी आवश्यक होता है। Here is an example, एक अलग ग्राफ संरचना का उपयोग करते समय संकलन त्रुटि में परिणाम होता है जिसे boost::make_iterator_range उपसर्ग द्वारा तय किया जा सकता है।

मैंने BGL documentation के आसपास थोड़ा सा देखा, लेकिन इस मुद्दे के बारे में कुछ भी नहीं मिला। क्या यह मेरी गलती है या कुछ बीजीएल हेडर वैश्विक नामस्थान प्रदूषित कर रहे हैं? क्या यह डिजाइन द्वारा है या यह एक बग है?

+1

तर्क-निर्भर लुकअप (एडीएल), ए.के.ए. कोएनिग लुकअप (एंड्रयू कोएनिग के बाद)। –

+0

मैं इस प्रश्न को दोबारा खोल रहा हूं क्योंकि कोई विस्तार से समझा सकता है, क्यों लिंक कोड –

+0

संकलित नहीं करता है एडीएल पर अन्य प्रश्न होने के बावजूद (जो खोजने के लिए काफी कठिन हैं, खासकर एडीएल शब्द खोजे बिना), यह है एक बहुत अच्छी तरह से पूछा सवाल। मुख्य चीज जिसे बेहतर किया जा सकता है यह है कि यह बूस्ट के बजाए सभी नामस्थानों के साथ होता है, लेकिन मैं इसे देखने के लिए क्लिक नहीं कर सकता हूं। – chris

उत्तर

4

यह boost से संबंधित नहीं है लेकिन किसी भी namespace से संबंधित नहीं है।

argument-dependent lookup (एडीएल) के साथ, तर्क से नामस्थान ओवरलोड की खोज में जोड़े जाते हैं।

उदाहरण के लिए

तो:

add_edge(0, 1, g); 

g नाम स्थान boost से है, इसलिए हम भी नाम स्थान boost में add_edge के लिए देखो।

+2

मुझे नहीं लगता कि यह वास्तव में उत्तर देता है कि ओपी द्वारा लिंक किया गया अन्य कोड उदाहरण संकलित क्यों नहीं करता है। –

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