Modifier type std::allocator
Franck7511
Messages postés
14571
Date d'inscription
Statut
Membre
Dernière intervention
-
Franck7511 Messages postés 14571 Date d'inscription Statut Membre Dernière intervention -
Franck7511 Messages postés 14571 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai une classe avec un template du style
Qu'est ce que je pourrais mettre à la place des points d'interrogation ?
J'ai pensé à Alloc::rebind<K> mais ça me fait planter (oui oui) le compilateur de Visual Studio.
Merci de votre aide
J'ai une classe avec un template du style
template<class T, class K, class Alloc = std::allocator<T> >
class MyClass {
std::vector<T, Alloc> Vec1;
std::vector<K, ?????> Vec2;
};
Qu'est ce que je pourrais mettre à la place des points d'interrogation ?
J'ai pensé à Alloc::rebind<K> mais ça me fait planter (oui oui) le compilateur de Visual Studio.
Merci de votre aide
A voir également:
- Modifier type std::allocator
- Modifier dns - Guide
- Modifier liste déroulante excel - Guide
- Comment modifier un tableau sur word - Guide
- Clear type - Guide
- Modifier extension fichier - Guide
2 réponses
'lut
Pourquoi ne pas passer un type d'allocateur pour tous les vector?
from human import idiocy
del idiocy
Pourquoi ne pas passer un type d'allocateur pour tous les vector?
template<class T, class K, template<typename> class Alloc = std::allocator>
class MyClass {
std::vector<T, Alloc<T> > Vec1;
std::vector<K, Alloc<K> > Vec2;
};Ou si on veut spécifier spécialement ceux pour T et K (celui de K étant celui de T par défaut)(et peut-être pour tous les autres types qui peuvent suivre):
template<class T, class K, template<typename> class AllocT = std::allocator, template<typename> class Alloc = AllocT>
class MyClass {
std::vector<T, AllocT<T> > Vec1;
std::vector<K, Alloc<K> > Vec2;
};
from human import idiocy
del idiocy
Bonjour,
C'est une bonne idée mais je voudrais garder une compatibilité avec le standard...
Toutefois, si je peux "récupérer" std::allocator à partir de std::allocator<__Ty> ça pourrait être une piste, non ?
J'essaie ça :
Et ça ne marche pas.
Par contre, ça :
Fait bien ce que je veux. Idem avec la version allocator_traits.
Mais l'idée c'est d'utiliser avec d'autres allocators :)
Merci de votre aide!
C'est une bonne idée mais je voudrais garder une compatibilité avec le standard...
Toutefois, si je peux "récupérer" std::allocator à partir de std::allocator<__Ty> ça pourrait être une piste, non ?
J'essaie ça :
template <class K, class T, class _Alloc = std::allocator<K> >
class MyClass
{
template<typename __T>
using Alloc = typename _Alloc::rebind<__T>::other;
template<typename __T>
using Layer = std::vector<__T, Alloc<__T> >;
template<typename __T>
using Map = Layer<Layer<__T> >;
/* ... */
}
Et ça ne marche pas.
Par contre, ça :
template <class K, class T, /*, class _Alloc = std::allocator<K>*/ >
class MyClass
{
template<typename __T>
using Alloc = typename std::allocator<K>::rebind<__T>::other;
template<typename __T>
using Layer = std::vector<__T, Alloc<__T> >;
template<typename __T>
using Map = Layer<Layer<__T> >;
/* ... */
}
Fait bien ce que je veux. Idem avec la version allocator_traits.
Mais l'idée c'est d'utiliser avec d'autres allocators :)
Merci de votre aide!
J'ai modifié le programme en conséquence, j'ai désormais :
Mais idem, toujours une erreur... "Argument modèle non valide pour '__Alloc', type attendu
Merci