을 표준 리비전을 지정하지 않았습니다. 함수의
#include<vector>
#include<functional>
#include<utility>
template<std::size_t... I, typename F, typename... A>
auto gen(std::index_sequence<I...>, F &&f, A... args) {
return std::vector<decltype(std::forward<F>(f)(args...))>{
(I, std::forward<F>(f)(args...))...
};
}
template<std::size_t N, typename F, typename... A>
auto gen(F &&f, A... args) {
return gen(std::make_index_sequence<N>{}, std::forward<F>(f), args...);
}
int f(int, char) { return 0; }
int main() {
auto vec = gen<10>(&f, 0, 'c');
}
반환 유형을 쉽게 추론된다 :
decltype(std::forward<F>(f)(args...))
내가 N이 함수의 호출을 포함하는 컨테이너를 만들려면 여기
는 최소한의 작업 예입니다. 그런 다음 여러 번 실행하고 싶습니다.
이렇게하려면 std::index_sequence
을 사용하여 올바른 크기의 매개 변수 팩을 만드십시오.
(I, std::forward<F>(f)(args...))...
기본 개념은 상술 한 파라미터 팩을 풀고 N
배 기능을 실행 콤마 연산자를 이용하는 것이다 : 그것은 다음
나서 벡터 자체가 초기화된다. invokations에 의해 반환 된 값은 f
이며 벡터를 채우는 데 사용됩니다.
args
은 f
으로 완벽하게 전달되지 않습니다.
처음 실행하는 동안 움직일 수있는 객체가 소비되는 경우 문제가 발생할 수 있습니다.
[이 StackOverflow 질문] (http://stackoverflow.com/questions/11310898/how-do-i-get-the-type-of-a-variable) 귀하의 질문에 대한 답변을 수도 있습니다. – Nietvoordekat
당신은 해결책을 여기서 볼 수 있습니다 : http://stackoverflow.com/a/41301717/2378300 – Jonas