Say masz krotka i chcą, aby wygenerować nowy krotki przez przyłożenie metafunkcji na każdego typu pierwszego. Jaka jest najskuteczniejsza metafuntja C++ do wykonania tego zadania? Czy możliwe jest również użycie szablonu variadic C++ 0x, aby zapewnić lepszą implementację?Generowanie krotki z krotek
5
A
Odpowiedz
8
Jak „bout to jedno:
template<typename Metafun, typename Tuple>
struct mod;
// using a meta-function class
template<typename Metafun, template<typename...> class Tuple, typename ...Types>
struct mod<Metafun, Tuple<Types...>> {
typedef Tuple<typename Metafun::template apply<Types>::type...>
type;
};
Następnie
typedef std::tuple<int, bool> tuple_foo;
struct add_pointer {
template<typename T>
struct apply { typedef T *type; };
};
typedef mod<add_pointer, tuple_foo>::type tuple_ptrfoo;
To się stosując klasę metafunkcji owijając apply
do non-szablonu. Że umożliwia przepuszczenie go do C++ 03 szablonów (które nie może przyjąć szablonów z dowolnych parametrów, po prostu robi template<typename...> class X
). Możesz oczywiście przyjąć czystą metafunkcji (nie klasę) zbyt
template<template<typename...> class Metafun, typename Tuple>
struct mod;
// using a meta-function
template<template<typename...> class Metafun, template<typename...> class Tuple,
typename ...Types>
struct mod<Metafun, Tuple<Types...>> {
typedef Tuple<typename Metafun<Types>::type...>
type;
};
i użyć std::add_pointer
szablon
typedef mod<std::add_pointer, tuple_foo>::type tuple_ptrfoo;
Można też owinąć go w klasie, więc jest to zgodne z pierwszą wersja
// transforming a meta function into a meta function class
template<template<typename...> class Metafun>
struct ToClass {
template<typename ... T>
struct apply { typedef Metafun<T...> type; };
};
typedef mod<ToClass<std::add_pointer>, tuple_foo>::type tuple_ptrfoo;
Mam nadzieję, że to pomaga.
+0
Cool litb (awgn). –
Powiązane problemy
- 1. Sprawdź, czy element krotki krotek
- 2. Dzielenie krotki na wiele krotek w Pig
- 3. Extract drugi element krotki w liście krotek
- 4. Generowanie wszystkich możliwych permutacji (lub n-krotki)
- 5. Podziel listę krotek na podlisty tego samego pola krotki
- 6. Dlaczego krotki nie są niszczone podczas iteracji po tablicy krotek?
- 7. Zachowaj krotki Pythona z JSON
- 8. Scala Mapa z krotki iterable
- 9. PIG: Zbierz wszystkie krotki z zgrupowane worka
- 10. Wyodrębnianie informacji z krotki (Python)
- 11. Swift: Deklaracja pustych krotek
- 12. przechodniów python krotek zamknięcia
- 13. Numpy losowy wybór krotek
- 14. scala krotki String
- 15. Scala: Równoległe przypisywanie krotek
- 16. rozpakuj listę krotek
- 17. Python: lista wykresów krotek
- 18. Dodawanie dwóch krotek elementwise
- 19. Argumenty konstruktora z krotki
- 20. Średnia z krotki
- 21. Scala: Jak podsumować listę krotek
- 22. Znajdź element w liście krotek
- 23. Lista krotki do DataFrame Conversion
- 24. Asercje testowe dla krotek z pływami
- 25. Python 3: Odwinąć argumentów krotki
- 26. Usuń krotkę z listy krotek, jeśli spełniony jest pewien warunek
- 27. PYTHON: Konwertowanie listy krotek do słownika
- 28. Elegancki sposób na stworzenie słownika par z listy krotek?
- 29. Dlaczego krotki są ujęte w nawiasy okrągłe?
- 30. Bądź wykres punktowy z zestawu punktów w krotek
Boost.MPL mogą być interesujące, ma 'transform' meta-funkcji. – GManNickG