c++ で可変長の initializer_list を作成する可能性はありますか?
例として:
std::list<string> mylist { somemagic (listSize, "default") };
または:
QList<MyClass> anotherList { somemagic (listSize, {MyClassInitializerHere} ) };
c++ で可変長の initializer_list を作成する可能性はありますか?
例として:
std::list<string> mylist { somemagic (listSize, "default") };
または:
QList<MyClass> anotherList { somemagic (listSize, {MyClassInitializerHere} ) };
以下を使用できます: ( https://ideone.com/eQstbh )
#include <initializer_list>
#if 1 // Not in C++11 // make_index_sequence
#include <cstdint>
template <std::size_t...> struct index_sequence {};
template <std::size_t N, std::size_t... Is>
struct make_index_sequence : make_index_sequence<N - 1, N - 1, Is...> {};
template <std::size_t... Is>
struct make_index_sequence<0u, Is...> : index_sequence<Is...> {};
#endif // make_index_sequence
namespace detail
{
template <std::size_t... Is, typename T>
std::initializer_list<T> make_initializer_list(const T& t, index_sequence<Is...>)
{
return { (static_cast<void>(Is), t)... };
}
}
template <std::size_t N, typename T>
std::initializer_list<T> make_initializer_list(const T& t)
{
return detail::make_initializer_list(t, make_index_sequence<N>());
}