Utilisation du multi_index_container
Bonjour à tous,
Quand j'envoie une donnée dans un outils, elle l'intègre et me renvoie l'identifiant de cette donnée, à réutiliser par la suite comme référence.
Ainsi, dans mon programme appelant, il me faut un conteneur pouvant gérer une structure donnée / identifiant, et pouvoir avoir accès à l'un via l'autre, et inversement.
J'utilise donc le multi_index_container, comme ceci :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
|
// structure composée de la donnée et son identifiant
template<class T>
struct SData
{
SData(int iId, T* pData) : m_iId(iId), m_pData(pData) {}
SData() {}
int m_iId;
T* m_pData;
};
// set de données
template<class T>
class CDataSet
{
private:
struct SOrderedAsInserted{};
struct SOrderedAsIds{};
struct SOrderedAsData{};
typedef boost::multi_index::multi_index_container<SData<T>,
boost::multi_index::indexed_by< // référencé par
boost::multi_index::sequenced<boost::multi_index::tag<SOrderedAsInserted>>, // insertion
boost::multi_index::ordered_unique< // Ids
boost::multi_index::tag<SOrderedAsIds>,
boost::multi_index::member<SData<T>,int,&SData<T>::m_iId>>,
boost::multi_index::ordered_unique< // Data
boost::multi_index::tag<SOrderedAsData>,
boost::multi_index::member<SData<T>,T*,&SData<T>::m_pData>>
>
> TMySet; /*!< Type de stockage du mapping. */
TMySet m_set;
typedef TMySet::index<SOrderedAsInserted>::type TByInsertion;
typedef TMySet::index<SOrderedAsIds>::type TByIds;
typedef TMySet::index<SOrderedAsData>::type TByData;
public:
void Add(int iId, T* data)
{
m_set.insert(m_set.end(), SData<T>(iId, pData));
}
} |
Alors premier problème qui se pose, c'est que les trois lignes "typedef" définissant les types d'index ne compilent pas..
Et ensuite, mon programme produit des crash "memory corruption". Si je retire les deux "ordered_unique" index, mon application de crash plus.
J'utilise les multi_index_container dans un autre cas, pour lier deux chaînes de caractères, dans une structure non typée, et je n'ai jamais eu ce genre de problème..
Pouvez-vous m'aiguiller ? (j'ai essayé avec la version 1.46, 1.47 et 1.49 de boost, ça crash toujours)
Merci à vous :)
A bientôt