कई साल पहले, (कम से कम मेरे लिए) स्थिर सी ++ बहुरूपता सुसंगत लगती थी। इस तरह अजगर के रूप में बोली duck typing पर भरोसा किया है, जहां आप हैं:क्यों सी ++ 1 * फिर भी पूर्ण बतख टाइपिंग के लियू में टेम्पलेट कीवर्ड की आवश्यकता है
def fn(foo, bar):
foo.baz(bar.bo())
और विचार है कि अगर यह "quacked" उचित रूप से, यह भाषा से ठीक था।
सी ++ में, इसके विपरीत, आप को समझाने के लिए क्या "जानवर" यह था होगा:
void fn(foo_type foo, bar_type bar);
और "परिवारों के राज्यों के लिए", आप स्पष्ट रूप से template
कीवर्ड का उपयोग पूरे करने होंगे:
template<class Foo, class Bar>
void fn(Foo foo, Bar bar);
auto ...() -> decltype
वापसी प्रकार है, लेकिन विशेष रूप से generic lambdas की तरह नई सुविधाओं के साथ, वहाँ और अधिक की तरह कुछ हो गया लगता है गैर टेम्पलेट अजगर की तरह डु सी.के. टाइपिंग:
[] (auto container) { return container.size(); };
मेरा प्रश्न है, तो, है क्यों template
कीवर्ड है अभी भी जरूरत है? क्यों न सिर्फ पूरी तरह से (वैकल्पिक) बतख टाइपिंग आलिंगन:
// Takes a foo_type and a bar_type
void fn(foo_type foo, bar_type bar);
// Takes some "foo-quacking" type, and a bar_type
void fn(auto foo, bar_type bar);
// Etc.
आप सी ++ 1Z/C++ 2x के लिए अवधारणाओं प्रस्तावों की जांच की है? – Yakk
@ यक, धन्यवाद - मैंने अवधारणाओं पर ध्यान नहीं दिया। पढ़ा जाएगा। –
यह आ रहा है, लेकिन सब कुछ एक साथ नहीं होता है। सी ++ 11 में हमने लैम्बडास के लिए वापसी प्रकारों को घटा दिया, फिर सी ++ 14 में हमने उन्हें सभी कार्यों के लिए प्राप्त किया। सी ++ 14 में हमें जेनेरिक लैम्बडास (यानी 'ऑटो' पैरामीटर मिलते हैं) और अवधारणाएं टीएस सामान्य कार्यों के लिए समान जोड़ती हैं (ऐसा फ़ंक्शन निहित रूप से फ़ंक्शन टेम्पलेट बन जाता है और आपूर्ति किए गए तर्कों के लिए तत्काल हो जाता है)। –