मैं रिटर्न प्रकार और पैरामीटर प्रकारों के नलिका और यूनरी फ़ंक्शन पॉइंटर्स, std :: फ़ंक्शन ऑब्जेक्ट्स, और फ़ैक्टर (लैम्ब्स समेत) का पता कैसे लगा सकता हूं?फ़ंक्शन ऑब्जेक्ट (फ़ैक्टर) और लैम्ब्डा लक्षणों का पता लगाना
बूस्ट का function_traits और functional traits मुझे बॉक्स से बाहर नहीं ले जाता है, लेकिन मैं उन्हें पूरक या बदलने के लिए खुला हूं।
मैं कुछ इस तरह कर सकता है:
namespace nsDetail
{
class Dummy { Dummy(); };
}
template<class Fn> struct FnTraits;
template<class R>
struct FnTraits<R(*)()>
{
typedef nsDetail::Dummy ParamType;
typedef R ReturnType;
typedef R Signature();
};
template<class R, class P>
struct FnTraits<R(*)(P)>
{
typedef P ParamType;
typedef R ReturnType;
typedef R Signature(P);
};
template<class R>
struct FnTraits< std::function<R()> >
{
typedef nsDetail::Dummy ParamType;
typedef R ReturnType;
typedef R Signature();
};
template<class R, class P>
struct FnTraits< std::function<R(P)> >
{
typedef P ParamType;
typedef R ReturnType;
typedef R Signature(P);
};
लेकिन मैं के लिए functors/lambdas कैसे विशेषज्ञ होना चाहिए?
अद्यतन: शायद this answer to a different question में कुछ ऐसा है, लेकिन अधिभार से विशेषज्ञता के लिए अनुवाद किया गया है?
इस उत्तर में कुछ इस बारे में क्या है: http://stackoverflow.com/questions/4170201/c0x-overloading-on-lambda-arity/4196447#4196447 यह ओवरलोडिंग का उपयोग कर रहा है, लेकिन शायद कुछ ऐसा ही विशेषज्ञता के लिए काम कर सकता है? – metal
@mlimber मैंने वास्तव में यह जवाब देने के लिए अपना जवाब संपादित किया कि –
इसके लिए धन्यवाद! – metal