Есть ли способ в C ++ определить сигнатуру функции вызываемого объекта?
Рассмотрим следующее:
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
, но ни в коем случае не смог заставить его работать.)