Мне нужен какой-то способ объединить способность лямбды перехватывать значение времени выполнения и способность шаблона функции указывать любой тип, который мы хотим. Каков наилучший способ сделать это?
Лямбда позволяет нам захватывать значение локальной переменной во время выполнения, например,
unsigned char c=0;
auto compareEquality=[c](unsigned char c1) ->bool {return c1==c;};
..
scanner(compareEquality);
Таким образом, scanner
передается функция, в которую встроено определенное во время выполнения значение 0, а внутри scanner
мы вызываем compareEquality
, передавая ей unsigned char
для сравнения с 0 или любыми другими значениями, полученными во время выполнения. Но я также хочу, чтобы параметр был любого типа, который я хочу, а не просто unsigned char
. Было бы неплохо иметь это:
template<typename T>
bool compareEquality(T data) {
return ( data== c);//error, what is 'c'?
}
Но с шаблоном функции я не могу встроить постоянную времени выполнения в нее и просто передать функцию следующим образом:
scanner(compareEquality);
Приведенный выше код не позволяет мне указать, какое значение сравнивать внутри функции.
Каков наилучший способ объединить шаблон функции и лямбда-захват, чтобы compareEquality
можно было передавать с некоторым встроенным значением времени выполнения, пока нам не нужно определять отдельные версии, принимающие разные типы параметров.