2
템플릿 기반 기능 :템플릿 함수가 람다의 주장을 추론 할 수 있습니까? 다음과 같이 그 함수 포인터의 인수를 추론 할 수있는 함수 포인터를 취
template<class... Args>
void func(void (*ptr)(Args&& ...)) {
//Do something useful knowing the Args...
}
당신이 인수로 람다와 동일 할 수있다; std::function
에 의존하거나 function_traits와 같은 메타 프로그래밍 특성 클래스를 쓰지 않고? 함수를 사용하여 인수를 추론합니다.
람다 매개 변수를 얻기위한 인수로'decltype (& T :: operator()) (Args && ...)'와 같은 것을 쓸 수 있다는 것을 의미합니까, 아니면 엄격히 불가능합니까? – Brian
@Brian 네, 람다가 다형성이 아니라면'R (T :: *) (Args ...)'를 인자 타입으로두고'& T :: operator()'를 인자로 넘길 수 있습니다. 람다의'operator()'는 const-qualified 일 수도 있고 아닐 수도 있고'noexcept' 일 수도 있고 가지지 않을 수도 있으며, 후행을 가질 수도 있고 가지지 않을 수도 있기 때문에 모든 경우를 커버하기 위해 총 8 오버로드가 필요합니다 생략. – Brian