2014-04-04 8 views
6

हर्ब सटर ने टॉक में बाधित टेम्पलेट्स (ए.के.ए. अवधारणा लाइट) का उल्लेख किया: Modern C++: What You Need to Knowबाध्य टेम्पलेट क्या हैं?

मुझे पता है कि बूस्ट में उम्र के लिए एक अवधारणा पैकेज है, जो एक को प्रिंट प्रिंट संदेशों को सुंदर प्रिंट करने की अनुमति देता है, जब टेम्पलेट कटौती तंत्र ऑपरेटरों, कार्यों या उल्लंघन उल्लंघन पैटर्न को खोजने में विफल रहता है।

मुझे isocpp blog पर उल्लेख का सामना करना पड़ा है कि gcc की document proposing Concepts Lite लागू करने वाली पहले से ही एक प्रायोगिक शाखा है। हालांकि वर्तमान C++14 draft को देखकर मुझे कोई संकेत नहीं मिला कि यह पहले से ही C++14 का हिस्सा होगा।

तो सवाल सरल हैं:

  • अवधारणाओं सी ++ 14 का हिस्सा हो लाइट होगा? (मानक पसंदीदा में संदर्भ। मुझे एक नहीं मिला, और मैं मानक से बहुत परिचित नहीं हूं।)
  • इसका सही वाक्यविन्यास क्या है? (हर्ब का प्रस्ताव और स्लाइड यहां अलग हो गई है और मुझे नहीं पता कि कौन सा अद्यतित है)
  • क्या आप एक बाधा (predicate) और एक बाधित टेम्पलेट का एक न्यूनतम उदाहरण दे सकते हैं?

नोट: आप काफी लंबे समय से मैं जीसीसी शाखा का प्रदर्शन शुरू करने की कोशिश करता हूँ और कम से कम प्रयोगात्मक कार्यान्वयन, जो हालांकि वाक्य रचना की शुद्धता संकेत नहीं करता है के बारे में कुछ भी कह सकते हैं इंतजार है।

+0

* स्वीकार करेगा लाइट सी ++ 14 का हिस्सा होगा? (मानक पसंदीदा में संदर्भ * क्या? अभी तक कोई सी ++ 14 मानक नहीं है। वैसे भी, नहीं, वे सी ++ 14 में नहीं होंगे। मैं कुछ संदर्भ/चर्चा ढूंढने की कोशिश करूंगा .. – dyp

+2

[प्रस्ताव] (http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2013/n3580.pdf) यह बहुत अच्छी तरह से बताता है। ऐसा नहीं है कि यह इस सवाल को गैरकानूनी बनाता है, हर कोई 30 पृष्ठों को पढ़ना नहीं चाहता। – David

+3

[स्ट्रॉस्ट्रप अपने मुखपृष्ठ पर कहता है] (http://www.stroustrup.com/C++11FAQ.html#what-concepts) कि वे एक टीआर से सी ++ 14 के रूप में समाप्त हो जाएंगे। सुनिश्चित नहीं है कि कैसे- उस जानकारी को आज तक डेट करें, – dyp

उत्तर

3

अवधारणा लाइट सी ++ के लिए पूर्ण अवधारणाओं के डिजाइन की "बाधाओं" भाग है। यह N3701 "Concepts Lite" में बहुत विस्तार से वर्णित है। अध्याय 2 एक छोटा सा ट्यूटोरियल है जो जल्दी से मूल सिद्धांतों और उनके अनुप्रयोगों के माध्यम से चलता है, जो उन सभी लोगों के लिए बहुत अच्छा है जो सभी 56 पृष्ठों के माध्यम से पढ़ना नहीं चाहते हैं।

अवधारणाएं लाइट सी ++ 14 का हिस्सा नहीं होंगे, इसे इस वर्ष के अंत में एक अलग तकनीकी विशिष्टता के रूप में जारी किया जाएगा। टीएस वर्डिंग के लिए नवीनतम कच्चा मसौदा N3929 "Concepts Lite Specification" है।

कुछ अलग बाधा वाक्यविन्यास रूप हैं। कोड उदाहरण है कि हर्ब बात में इस्तेमाल किया:

auto mean(const Sequence& seq) { 
    auto n = 0.0; 
    for (auto x : seq) 
    n += x; 
    return n/seq.size(); 
} 

"संक्षिप्त वाक्य रचना" कहा जाता है क्योंकि यह अत्यधिक शब्द वाक्य रचना की एक छोटी बराबर है है:

template <typename __T> 
    requires Sequence<__T>() 
auto mean(const __T& seq) { 
    auto n = 0.0; 
    for (auto x : seq) 
    n += x; 
    return n/seq.size(); 
} 

वे दोनों संकेत मिलता है कि समारोह टेम्पलेट mean किसी भी प्रकार के साथ तत्काल किया जा सकता है जो Sequence अवधारणा मॉडल करता है। सादगी के लिए, की सुविधा देता है मान लेते हैं कि Sequence के लिए आवश्यकताओं को केवल क्या mean जरूरतों के बारे में हमारी कार्यान्वयन कर रहे हैं: (क) के सदस्यों begin & end कि iterators लौटने के लिए, और (ख) सदस्य समारोह size कि कुछ अभिन्न प्रकार देता है। Integral, InputIterator, और Same की सीधी-सपाट परिभाषाओं संभालने

template <typename T> 
concept bool Sequence() { 
    return requires(T t) { 
    {t.size()} -> Integral; 
    {t.begin()} -> InputIterator; 
    {t.end()} -> InputIterator; 
    requires Same<decltype(t.begin()), decltype(t.end())>(); 
    } 
} 

: हम के रूप में अवधारणा को परिभाषित कर सकते हैं।इस अवधारणा को परिभाषा सुनिश्चित करता है कि, प्रकार T में से कुछ का आविष्कार मूल्य t के लिए परीक्षण किया जा रहा:

  • t.size() एक वैध अभिव्यक्ति है, और यह एक प्रकार है कि मॉडल Integral अवधारणा देता है।
  • t.begin() मान्य है, और एक प्रकार देता है जो मॉडल InputIterator
  • t.end() के लिए ही।
  • InputIteratort.begin() द्वारा लौटाया गया वही प्रकार है जो t.end() द्वारा लौटाया गया है।
संबंधित मुद्दे