Я не уверен, возможно ли это, так что я хочу узнать.
Я хотел бы создать функцию, которая принимает любой объект-функтор/вызываемый объект, но я хочу знать, что такое тип аргумента. (но не применять его)
Итак, это фиксирует все, но не дает мне тип аргумента:
template < typename T >
void optionA( T );
Этот захват больше всего и имеет тип аргумента
template < typename T >
void optionB( std::function< void(T) > );
Но это не позволяет лямбда, поэтому
optionB( [](int){} );
не будет компилироваться. Что несколько странно, поскольку это скомпилируется:
std::function< void(int) > func = [](int){};
optionB( func );
Итак, есть способ принять все параметры, а также узнать, какой тип аргумента ожидается?
заблаговременно!
- изменить -
Причина, по которой я хочу это сделать, связана с тем, что я хочу, чтобы пользователь моей библиотеки зарегистрировал обратный вызов с определенным типом. Для меня наиболее естественным способом является
auto callback = []( int val ) { cout << "my callback " << val << endl; };
object.register( callback );
(с использованием или без использования обратного вызова в качестве промежуточной переменной)
Поскольку мне нужно изменить поведение, основанное на типе значения, которое ожидает пользователь, мне нужно знать, какой тип он/она ожидает.