をあなたがそれを指定していないため、標準リビジョンです。あなたの関数の
#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...))
I nは、この関数の呼び出しを格納するためのコンテナを作成したい。ここ
は最小限、実施例です。それから私は何度もそれを実行したい。
これを行うには、std::index_sequence
を使用して、適切なサイズのパラメータパックを作成しました。
(I, std::forward<F>(f)(args...))...
基本的な考え方は、上記パラメータパックを解凍し、N
倍機能を実行するためのカンマ演算子を利用することである:それは次のように
そしてベクター自体が初期化されます。呼び出すことによって返された値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