मैं एक टेम्पलेट फ़ंक्शन लिखना चाहता हूं जो 2 मानों और एक मज़ेदार या लैम्ब्डा स्वीकार करता है। फ़ंक्शन मल्टीक्टर को उन मानों के साथ कॉल करता है और परिणाम देता है।फ़ैक्टर के वापसी मूल्य के प्रकार को कैसे घटाया जाए?
template <typename T, typename Fn>
_ReturnTypeOfPred_ Apply(T x, T y, Fn fn)
{
return fn(x, y);
}
प्रश्न: मैं Apply
की वापसी प्रकार परिभाषित कर सकते कैसे Fn
की वापसी प्रकार के बराबर हो जाते हैं? यह functor
template <typename T>
auto Sum(T x, T y) -> decltype(x+y)
{
return x+y;
}
अद्यतन
1 उदाहरण oversimplified था की इस उदाहरण में जरूरी T
के बराबर नहीं है,। क्या यह काम करेगा?
template <typename TContainer, typename Fn>
auto Apply(const TContainer& x, const TContainer& y, Fn fn) -> decltype(fn(x.front(), y.front()))
{
return fn(x.front(), y.front());
}
यह हमेशा अगर मैं वापसी प्रकार की decltype
में return
अभिव्यक्ति दोहराने काम करोगे? क्या कोई और सुरुचिपूर्ण तरीका है?
अंडरस्कोर-पूंजी नाम कार्यान्वयन के लिए आरक्षित हैं। आपको उन्हें अपने कोड में उपयोग नहीं करना चाहिए। –
@KerrekSB: यह प्लेसहोल्डर था, वास्तविक कोड नहीं – Andrey
अच्छे मल्टीक्टर (जैसे कि एसटीएल में) हमेशा अपने 'वापसी_ प्रकार' को परिभाषित करते हैं, ताकि आप केवल 'Fn :: return_type' का उपयोग कर सकें। लेकिन मैं समझता हूं कि आप एक ऐसा उत्तर चाहते हैं जो बहुत अच्छे मज़दूरों के लिए भी काम न करे। – Gorpik