2011-06-02 11 views
9

आईएसओ मसौदे से एक बिंदु n3290 खंड 3.4.2 अनुच्छेद 1:3.4.2 तर्क पर निर्भर नाम देखने

जब एक समारोह कॉल में पोस्टफ़िक्स अभिव्यक्ति एक अयोग्य-आईडी है, सामान्य नामांकित लुकअप के दौरान अन्य नामस्थानों को नहीं माना जा सकता है, और उन नामस्थानों में, नामस्थान-स्कोप मित्र फ़ंक्शन घोषणाएं अन्यथा दिखाई नहीं दे सकती हैं। खोज में ये संशोधन तर्कों के प्रकार (और टेम्पलेट टेम्पलेट तर्कों के लिए, टेम्पलेट तर्क का नामस्थान) पर निर्भर करते हैं।

यहां उन्होंने कहा "खोज में ये संशोधन तर्क/टेम्पलेट टेम्पलेट तर्क/टेम्पलेट तर्क के नामस्थान के प्रकारों पर निर्भर करता है" ... क्या कोई उदाहरण के साथ विस्तार कर सकता है?

foo(x); 

ADL मतलब यह है कि foo में नहीं बस अभी-अभी है: मैं टेम्पलेट टेम्पलेट तर्क प्रकार के साथ expalin टेम्पलेट तर्क प्रकार

उत्तर

17

की & नाम स्थान एक सरल अयोग्य समारोह कॉल पर विचार करें types..please argumetn साथ करने की कोशिश की गुंजाइश गुंजाइश, और नामस्थान जिसमें कॉल है, लेकिन x के नाम का नामस्थान भी है। जैसे यदि xstd::vector<int> है तो नामस्थान std भी खोजा गया है। इस प्रकार:

int main() { 
    std::vector<int> x,y; 
    swap(x,y); 
} 

ठीक है, और std::swap() पर कॉल करेगा।

लुकअप भी किसी भी टेम्पलेट तर्क के नामस्थान पर निर्भर करता है, इसलिए xstd::vector<mynamespace::myclass> है तो mynamespace लुकअप में भी शामिल है। इस प्रकार

namespace mynamespace { 
    struct myclass {}; 
    void foo(std::vector<mynamespace::myclass> const&){} 
} 

int main() { 
    std::vector<mynamespace::myclass> x; 
    foo(x); 
} 

mynamespace::foo() पर कॉल करेगा।

अंत में, लुकअप टेम्पलेट टेम्पलेट पैरामीटर के रूप में उपयोग किए गए किसी भी टेम्पलेट के नामस्थानों तक भी विस्तारित होता है। जैसे

namespace mynamespace { 
    template<typename T> 
    struct mytemplate 
    {}; 

    template<typename T> 
    void bar(T const&) {} 
} 

template<template<typename> class T> 
struct wrapper {}; 

int main() { 
    wrapper<mynamespace::mytemplate> x; 
    bar(x); 
} 

हालांकि wrapper ग्लोबल नेम स्पेस में है, mynamespace::bar, मिल जाएगा क्योंकि टेम्पलेट टेम्पलेट x के लिए इस्तेमाल किया पैरामीटर mynamespace::mytemplate है।

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