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 : Sélectionner tout - Visualiser dans une fenêtre à part
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