Iterasi di atas daftar ketik template variadic C ++ [duplikat]
Dec 09 2020
Misalkan saya menggunakan template variadic sebagai typelist:
template <typename ... Types> struct tl {};
using my_list = tl<MyTypeA, MyTypeB, MyTypeC>;
Sekarang saya ingin memanggil fungsi templat untuk setiap jenis, seperti:
myFunc<MyTypeA>();
myFunc<MyTypeB>();
Bagaimana saya melakukannya?
Jawaban
1 super Dec 09 2020 at 18:38
Dengan c ++ 17 Anda dapat menggunakan ekspresi lipat .
template <typename ... Types>
void callMyFunc(my_list<Types...>) {
(myFunc<Types>(), ...);
}
1 Jarod42 Dec 09 2020 at 18:37
Dengan C ++ 17, Anda mungkin menggunakan ekspresi lipat
template <typename ...Ts>
void call_my_func(my_list<Ts...> )
{
(myFunc<Ts>(), ...);
}
1 MarekR Dec 09 2020 at 18:47
Versi C ++ 11:
template <typename ... Types>
void forEachMyFunc(tl<Types...>)
{
int dummy[] = {
(myFunc<Types>(), 0)...
};
(void)dummy;
}
https://godbolt.org/z/4nK67M
Ini versi yang lebih licik :
template<typename T>
class MyFunc {
public:
void operator()() const {
myFunc<T>();
}
};
template <template<typename> class F, typename ... Types>
void forEachTypeDo(tl<Types...>)
{
int dummy[] {
(F<Types>{}(), 0)...
};
(void)dummy;
}
...
forEachTypeDo<MyFunc>(my_list{});
Selalu Menjadi Ancaman: Mengapa Orang Berkulit Coklat dan Hitam Tidak Bisa Nyaman di Amerika Serikat
Taylor Sheridan Baru Menambahkan 1 Bintang 'Yellowstone' Favoritnya ke Pemeran 'Lawmen: Bass Reeves'