एक सामान्य न्यूनतम कार्य लिखना, मेरे दिमाग में दो प्रश्न आए। कोड किसी भी इनपुट प्रकार और विभिन्न तर्क संख्या के साथ ठीक काम करता है:सामान्य न्यूनतम और अधिकतम - सी ++
namespace xyz
{
template <typename T1, typename T2>
auto min(const T1 &a, const T2 &b) -> decltype(a+b)
{
return a < b ? a : b;
}
template <typename T1, typename T2, typename ... Args>
auto min(const T1 &a, const T2 &b, Args ... args) -> decltype(a+b)
{
return min(min(a, b), args...);
}
}
int main()
{
cout << xyz::min(4, 5.8f, 3, 1.8, 3, 1.1, 9) << endl;
// ^ ^ ^
// | | |
// float double int
}
वहाँ
decltype(a+b)
के लिए एक बेहतर प्रतिस्थापन है? मुझे लगता है कि एक मानक वर्ग है जिसे मैं याद नहीं कर सकता,decltype(std::THE_RESULT<a,b>::type)
जैसे कुछ।decltype(std::THE_RESULT<a,b>::type)
का लौटा प्रकारconst &
है या नहीं?
यह मेरे लिए अजीब लगता है कि आप एक और ख विभिन्न प्रकार होने के लिए अनुमति देते हैं। यह सभी प्रकार के गैरकानूनी तुलनाओं के लिए दरवाजा खुलता है, जैसे 'मिनट (42," तीन ")'। क्यों दोनों पैरामीटर (और वापसी मूल्य) की आवश्यकता नहीं है सभी एक ही प्रकार के हो? –
@AdrianMcCarthy: _ "अंकगणितीय प्रकारों के लिए, सामान्य प्रकार को (संभवतः मिश्रित-मोड) अंकगणितीय अभिव्यक्ति के प्रकार के रूप में देखा जा सकता है जैसे कि टी 0() + टी 1() + ... + टीएन()" _। तो मुझे लगता है, यह 'मिनट (42," तीन ")' उपयोग करने के लिए निषिद्ध है। यह संकलन त्रुटि बनाता है। – deepmax
वैसे, टेम्पलेट का उपयोग कर मैक्रो संस्करणों के अच्छे हिस्सों को पुन: पेश करने पर एक लेख है। यह आश्चर्यजनक रूप से करने के लिए बहुत कुछ है। – chris