Modifier type std::allocator
Franck7511
Messages postés
15853
Statut
Membre
-
Franck7511 Messages postés 15853 Statut Membre -
Franck7511 Messages postés 15853 Statut Membre -
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
- Modifier story facebook - Guide
- Modifier extension fichier - Guide
- Clear type - Guide
2 réponses
Bonjour,
À si Visual plante! Et en essayant
À si Visual plante! Et en essayant
std::vector<K, typename Alloc::rebind<K>::other> Vec2; std::vector<K, std::allocator_traits<Alloc>::rebind_alloc<K>> Vec2;
'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