7

मैं सही मानक कि min और max (और उस बात के लिए minmax) से वहाँ initializer_list वेरिएंट नए हैं पढ़ने में हूँ, लेकिन कोई variadic खाका वेरिएंट?सी ++ 11 में न्यूनतम और अधिकतम वैराडिक टेम्पलेट संस्करण?

इस प्रकार, यह ठीक है:

int a = min({ 1,2,a,b,5 }); 

लेकिन यह नहीं है:

int b = min(1,2,a,b,5); // err! 

मुझे लगता है कि कई लोगों को उम्मीद होती है कि variadic टेम्पलेट्स आसानी से इस कार्यान्वित किया जा सकता था, इसलिए वे निराश हो सकता है ।

मैं कहूंगा कि वीटी का उपयोग करना। min और max के लिए होगा overkill

  • variadic टेम्पलेट्स कई प्रकार के
  • प्रारंभकर्ता सूचियों जांच से निपटने में सक्षम है कि सभी प्रकार के डिजाइन द्वारा ही हैं

इसलिए आई.एल. कार्य के लिए बहुत बेहतर अनुकूल हैं।

क्या मेरी व्याख्या सही है?

उत्तर

10

आपकी व्याख्या सही है। N2772 में अधिक गहराई से तर्क शामिल है।

+0

सभी बहुत अच्छे हैं लेकिन अगर किसी के पास एक विविध सेट है तो अभी भी किसी को "std :: startizer_list' में" सामान्य प्रकार "खोज में रूपांतरण करना होगा (और" सामान्य प्रकार "को समझने के लिए एक अच्छा सम्मेलन ढूंढना होगा न्यूनतम)। – alfC

0

हाँ मुझे लगता है कि यह कहना उचित है कि सभी मूल्यों को संगत प्रकार के होने के कारण इस सुविधा के लिए एक अच्छा उम्मीदवार सूचीबद्ध करता है। यह कहना नहीं है कि आप अपना खुद का वैरिएड टेम्पलेट संस्करण नहीं लिख सके।

+0

"नहीं कर सका" या "नहीं" :-) हां, शायद, संभवतः। मुझे नहीं पता कि किसी को चाहिए या नहीं। अभिव्यक्ति के लिए 'अधिकतम (1,2, 3.1415, 4)' मैं सभी प्रकार की चीजों को चित्रित कर सकता हूं जो मैं संकलक करना चाहता हूं ... जैसे सभी 'int' को' डबल 'पर कास्टिंग करना, या सभी' डबल 'से 'int' '। अगर मैंने एक टेम्पलेट देखा जो इसे लागू करने का प्रयास करेगा ... मुझे नहीं पता कि मैं इसे भरोसा करता हूं। – towi

1

यहाँ के साथ और बूस्ट अवधारणाओं आम प्रकार लक्षण min जीसीसी 4.6 पर परीक्षण के लिए बिना variadic टेम्पलेट का उपयोग कर मेरी समाधान है। मुझे यकीन नहीं है कि अगर सामान्य_प्रकार की आवश्यकता है या नहीं, हालांकि।

#define LessThanComparable class 
#include <boost/type_traits/common_type.hpp> 


/*! Multi-Type Minimum of \p a. */ 
template <LessThanComparable T> const T & multi_type_min (const T & a) { return a; } // template termination 
/*! Multi-Type Minimum of \p a, \p b and \p args. */ 
template <class T, class ... R > 
//requires SameType <T , Args >... 
T multi_type_min(const T & a, const T & b, const R &... args) 
{ 
    return multi_type_min(a < b ? a : b, args...); 
} 

/*! Minimum of \p a. */ 
template <LessThanComparable T> const T & min(const T & a) { return a; } // template termination 
/*! Minimum of \p a, \p b and \p args. */ 
template <class T, class U, class ... R, class C = typename boost::common_type<T, U, R...>::type > 
C min(const T & a, const U & b, const R &... c) 
{ 
    return min(static_cast<C>(a < b ? a : b), static_cast<C>(c)...); 
} 
+0

mult_type_min केवल उसी प्रकार के तर्क स्वीकार करेगा। – Ricky65

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