Как определить тип параметра функции с учетом типа переданного ему аргумента?

Мне нужна характеристика типа, которая будет сообщать тип параметра функтора operator () с учетом типа функтора и типа аргумента, переданного в Это. По сути, мне нужно точно определить, в какой тип будет преобразован аргумент при передаче его в функтор. Для простоты предположим, что меня интересует только (потенциально шаблонный, потенциально перегруженный) operator () с одним аргументом. К сожалению, я ограничен c ++ 03. Это можно сделать? Если нет, то как насчет C ++ 11?

Вот один пример:

#include 
#include 

template
  struct parameter_type
{
  // what goes here?
  typedef ... type;
};

struct takes_float_cref
{
  void operator()(const float &);
};

int main()
{
  // when calling takes_float_cref::operator() with an int,
  // i'd expect a conversion to const float &
  assert(std::is_same(parameter_type::type, const float &>::value);

  return 0;
}

Связанный с вопрос (ответ на который не дает мне того, что мне нужно) дает контекст, в котором нужна такая черта . Я провел дополнительные модульные тесты на ideone .

13
задан Community 23 May 2017 в 10:29
поделиться