nullary および unary 関数ポインター、std::function オブジェクト、およびファンクター (ラムダを含む) の戻り値の型とパラメーターの型を検出するにはどうすればよいですか?
Boost の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 );
};
しかし、ファンクター/ラムダに特化するにはどうすればよいですか?
更新:おそらく別の質問に対するこの回答のようなものですが、オーバーロードから専門化に翻訳されていますか?