Есть ли способ в С++ определить подпись функции вызываемого объекта?
Рассмотрим следующее:
template< typename F >
void fun(F f)
{
// ...
}
Предположим, что fun
вызывается только с вызываемыми "вещами".
Внутри fun
Я хочу знать, что такое подпись функции f
. Это должно работать с указателями функций, ссылками, обертками, лямбдами, связями, объектами функций (при условии, что они имеют только один operator ()
) и т.д. Я ограничен Visual Studio 2010 SP 1, но я заинтересован в стандартных решениях, даже если не работает над этим компилятором.
(Функциональная подпись Return_Type ([Arg1_Type [, Arg2_Type [, ... ] ] ])
, такая же, как и для std::function
/boost::function
.)
Частичное решение знания, по крайней мере, возвращаемого значения f
имеет некоторое значение. (Я пробовал std::result_of
, но не смог заставить его работать в любом случае, я попробовал.)