私はコンパイル時の配列を取得したいので、this answerに来てください。以下はその答えからコードです:struct gens : gens<N-1, N-1, S...>
の構文が何であるかをメタプログラミングに関するいくつかの質問?
- :
#include <array> #include <algorithm> #include <iterator> #include <iostream> template<int ...> struct seq { }; template<int N, int ...S> struct gens : gens<N-1, N-1, S...> { }; template<int ...S> struct gens<0, S...> { typedef seq<S...> type; }; constexpr int f(int n) { return n; } template <int N> class array_thinger { typedef typename gens<N>::type list; template <int ...S> static constexpr std::array<int,N> make_arr(seq<S...>) { return std::array<int,N>{{f(S)...}}; } public: static constexpr std::array<int,N> arr = make_arr(list()); }; template <int N> constexpr std::array<int,N> array_thinger<N>::arr; int main() { std::copy(begin(array_thinger<10>::arr), end(array_thinger<10>::arr), std::ostream_iterator<int>(std::cout, "\n")); }
しかし、私はそうここに、メタプログラミングのための初心者です二つの質問がありますか? C++ 0xの
Delegating constructors
のようですが、わかりません。 struct seq
とtypedef seq<S...> type
の使用方法は?ああ、私もテンプレートの良いコマンドがありません。
** 1 **それは継承です。 'gens'は 'gens ' ** 2から派生したものです。**普通の 'typedef'です。 'type'という名前は' seq ' –
のエイリアスとして宣言されています。整数シーケンスのより複雑な実装です。分割と征服による再帰です。大きなインスタンス化の深さを避けるために使用されます。 –
もっと簡単な例については、[this](https://stackoverflow.com/a/27125297/4832499)を参照してください。 –