用C++ 14可以使用
std::integer_sequence
:
template <int... S>
constexpr std::array<int, sizeof...(S)> get_lookup_table_impl(std::integer_sequence<int, S...>)
{
return { factorial<S>::value... };
}
template <int S>
constexpr auto get_lookup_table()
{
return get_lookup_table_impl(std::make_integer_sequence<int, S>{});
}
请参阅一个完全有效的示例
here
.
诀窍在于
std::make_integer_sequence<int, S>{}
将创建的实例
std::integer_sequence<int, S...>
get_lookup_table_impl
factorial<S>::value...
解包并传递
S
factorial
std::array
,但你想用什么就用什么。