Dites que vous avez un tuple et que vous voulez générer un nouveau tuple en appliquant une métafonction sur chaque type du premier. Quelle est la métafonction C++ la plus efficace à accomplir pour cette tâche? Est-il également possible d'utiliser le modèle variadique C++ 0x pour fournir une meilleure implémentation?Génération de tuples à partir de tuples
5
A
Répondre
8
Comment « bout celui-ci:
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;
};
Puis
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;
C'est en utilisant une classe métafonction en enveloppant le apply
dans un non-modèle. Cela permet de passer aux templates C++ 03 (qui ne peuvent pas accepter les templates avec des paramètres arbitraires en faisant simplement template<typename...> class X
). Vous pouvez, bien sûr, accepter un métafonction pur (pas de classe) trop
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;
};
Et utiliser le modèle std::add_pointer
typedef mod<std::add_pointer, tuple_foo>::type tuple_ptrfoo;
Ou vous pouvez l'envelopper dans une classe il est donc compatible avec le premier version
// 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;
Espérons que ça aide.
+0
Litb cool (awgn). –
Questions connexes
- 1. Génération de tuples index modulo
- 2. Forcer des tuples dans des tuples?
- 3. Correspondance de tuples
- 4. C++ 0x: les tuples de tuples sont-ils autorisés?
- 5. Python: Suppression tuples à partir d'une liste de listes
- 6. Ajout de tuples aux listes
- 7. Utilisation de tuples dans Ruby?
- 8. Conversion de la liste des tuples à la liste des listes de tuples
- 9. liaison à une liste de tuples
- 10. Liste de filtrage des tuples
- 11. comparaison Tuples dans
- 12. Tuples correspondants dans Prolog
- 13. Comment convertir Tapez Tuples
- 14. Liste d'accès des tuples
- 15. tuples en python Expanding
- 16. Tuples dans Dicts
- 17. tuples vs records
- 18. retourner une liste consisiting des éléments à partir des tuples
- 19. Liste de tuples de dict en Python
- 20. utilisant tuples sql à la clause
- 21. Tri des tuples en F #
- 22. Carte de tuples dans un dictionnaire, python
- 23. Parse error de tuples imbriquées dans scala
- 24. Liste des tuples au recomposition de Numpy
- 25. nombre de tuples sans COUNT. C'est possible?
- 26. Python: containg tuples et Lits long int
- 27. Ajouter un autre tuple à un tuple de tuples
- 28. Trier une liste de tuples sans sensibilité à la casse
- 29. liste de tuples fois à scala avec déstructurer
- 30. Représentation d'une hiérarchie immuable à l'aide de tuples
Boost.MPL peut être intéressant, il a une méta-fonction 'transform'. – GManNickG