Мне нужна черта типа, которая сообщит тип параметра funter operator()
, заданный тип функтора и тип переданного ему аргумента. В принципе, мне нужно точно определить, к какому типу будет преобразован аргумент, передав его функтору. Для простоты предположим, что меня интересует только (потенциально templated, потенциально перегруженный) operator()
с одним аргументом. К сожалению, я ограничена С++ 03. Это можно сделать? Если нет, как насчет С++ 11?
Вот пример:
#include <cassert>
#include <type_traits>
template<typename Functor, typename Argument>
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<takes_float_cref, int>::type, const float &>::value);
return 0;
}
A связанный вопрос (чей ответ не дает мне совершенно то, что мне нужно) дает контекст необходимости такой черты. Я добавил дополнительные модульные тесты ideone.