2016-10-19 8 views
5

इम सी ++ के लिए नए, तो endlकिस प्रकार का फ़ंक्शन समाप्त हो रहा है? मैं एंडल की तरह कुछ कैसे परिभाषित करूं?

cout << "Hello" << endl; 

के रूप में रेखा को समाप्त करने वेब के आसपास मेरे शोध मुझसे कहता है यह एक समारोह है, यदि वह ऐसा कारण है कि हम इसे प्रयोग के बिना कॉल कर सकते हैं प्रयोग किया जाता है "() , "

मुझे लगता है कि जैसे एक समारोह कैसे घोषित करते हैं, हमें लगता है कि मैं एक समारोह है कि बस के बजाय इस तरह हर उपयोग करने के लिए होने की अब सांत्वना हर मैं

string ain() 
{ 
    return " : ?"; 
} 

के रूप में इनपुट के लिए पूछना अप tidies बनाना चाहते जाने इस

cout << "Whats your name " << ain(); 

मैं के रूप में

cout << "Question " << ain; 

उपयोग करने में सक्षम होना चाहता हूँ बस अंत में, मुझे पता है कि "()" ज्यादा नहीं है और यह वास्तव में एक टन लोड बचाने के लिए कुछ भी बड़ा नहीं करता है, लेकिन मूल रूप से यह सवाल पूछने के लिए कि मैं अंततः ऐसा क्यों कर सकता हूं।

template< class CharT, class Traits > 
std::basic_ostream<CharT, Traits>& endl(std::basic_ostream<CharT, Traits>& os); 

std::ostream के operator<< यह देख कर कॉल करने के लिए ओवरलोड हो गया है:

+1

* "हम इसका उपयोग किए बिना क्यों कॉल कर सकते हैं"(); "" * आप इसे कॉल नहीं करते हैं। 'std :: ostream :: ऑपरेटर <<' करता है (अधिभार जो पैरामीटर के रूप में फ़ंक्शन पॉइंटर लेता है, संख्या (9), (10) या (11) [यहां] (http://en.cppreference.com/ डब्ल्यू/सीपीपी/कब/basic_ostream/operator_ltlt))। इसके लिए काम करने के लिए, फ़ंक्शन में आप में से एक विशिष्ट हस्ताक्षर होना चाहिए; ['std :: endl'] (http://en.cppreference.com/w/cpp/io/manip/endl) उनमें से एक होता है। –

+0

और कृपया ध्यान दें कि 'std :: endl' की शायद ही कभी आवश्यकता है, हालांकि इसका व्यापक रूप से उपयोग किया जाता है। 'st' :: endl' करता है जो अतिरिक्त सामान किए बिना, \ n '' एक पंक्ति समाप्त करता है। –

उत्तर

9

प्रति cppreference endl के रूप में निम्नलिखित प्रोटोटाइप के साथ एक समारोह टेम्पलेट है।

cout << foo << endl; 

को क्रियान्वित करने foo प्रिंट होगा

template< class CharT, class Traits > 
std::basic_ostream<CharT, Traits>& foo(std::basic_ostream<CharT, Traits>& os) 
{ 
    return os << "foo!"; 
} 

अब,:

आप एक ऐसी ही टेम्पलेट खुद को परिभाषित कर सकते हैं! मानक आउटपुट में।

की तरह कुछ
std::ostream& ain(std::ostream& out); 

इसके कार्यान्वयन होगा::

4

std::ostream एक सदस्य समारोह अधिभार

std::ostream& operator<<(std::ostream& (*func)(std::ostream&)); 

इसका मतलब है कि आप

std::cout << ain; 

उपयोग कर सकते हैं ain के रूप में घोषित किया गया है

std::ostream& ain(std::ostream& out) 
{ 
    return (out << " : ?"); 
} 
संबंधित मुद्दे