Я хотел бы иметь возможность вывести первый аргумент вызываемого. Я могу заставить его работать бесплатно и выполнять функции члена, но я борюсь с лямбдами. Есть ли какой-то трюк, который я могу использовать?Вывести первый аргумент вызываемого
Вот пример. Внутри функций match
, я хочу использовать знания T
.
template<class T>
void match(void (*)(T*, int)) { /* First */ }
template<class T>
void match(void (T::*)(int)) { /* Second */ }
template<class T>
void match(std::function<void(T,int)>) { /* Third */ }
struct A
{
void f(int) {}
};
void g(A*, int) {}
match(&A::f); // Ok, matches first
match(&g); // Ok, matches second
match([](A*, int) {}); // Not Ok
match([&](A*, int) {}); // Not Ok
Связано с [is-it-possible-to-figure-out-the-parameter-type-and-return-type-of-a-lambda] (http://stackoverflow.com/questions/7943525/is -it-possible-to-figure-out-the-parameter-type-and-return-type-of-a-lambda) – Jarod42
@ Jarod42 Brilliant! Это именно то, что я искал! – foxcub