두 개 이상의 예제 함수가 주어지면 템플릿 매개 변수로 제공되는 함수의 인수를 추론 할 수있는 템플릿 코드를 작성할 수 있습니까?함수 포인터에서 인수 목록을 추론하는 방법?
이것은 동기 부여 예입니다 /*???*/
모두 사용에서
void do_something(int value, double amount) {
std::cout << (value * amount) << std::endl;
}
void do_something_else(std::string const& first, double & second, int third) {
for(char c : first)
if(third/c == 0)
second += 13.7;
}
template<void(*Func)(/*???*/)>
struct wrapper {
using Args = /*???*/;
void operator()(Args&& ... args) const {
Func(std::forward<Args>(args)...);
}
};
int main() {
wrapper<do_something> obj; //Should be able to deduce Args to be [int, double]
obj(5, 17.4); //Would call do_something(5, 17.4);
wrapper<do_something_else> obj2; //Should be able to deduce Args to be [std::string const&, double&, int]
double value = 5;
obj2("Hello there!", value, 70); //Would call do_something_else("Hello there!", value, 70);
}
, 나는 이러한 종류의 코드를 활성화 것이라고 거기에 넣을 수있는 것을 해결하려고 노력하고있다.
처음 사용하기 전에 Args
이 정의되어 있지 않아 다음과 같이 작동하지 않습니다 (많은 구문 오류가 있다고 가정해야 함). 그래도 여전히 찾고 있습니다. 스스로 종류의 명시 적 서면을 필요로하지 않는 버전 :
template<void(*Func)(Args ...), typename ... Args)
struct wrapper {
void operator()(Args ...args) const {
Func(std::forward<Args>(args)...);
}
};
wrapper<do_something, int, double> obj;
http://en.cppreference.com/w/ cpp/유틸리티/기능/기능)? – bolov
@bolov 내가 특별히 찾고있는 것은 제공된 '함수'에서'Args '를 추론하는 방법입니다. 'std :: function'는 타입 인자 목록에 명시 적으로 명시된 타입을 가지고 함수 포인터를 찾습니다. – Xirema
C++ 17을 수락 하시겠습니까? wink wink – bolov