Bonsoir,
Soit une architecture assez simple comme celle decrite ci-dessous
a l'utilisation, je fais quelque chose comme ca (dans un autre composant)
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 class A { ..... }; template <class TYPE> class B { public : void Set(SmartPtr<Image<TYPE>> p_pData) { m_pData = p_pData; }; protected : SmartPtr<Image<TYPE>> m_pData; };
Mon probleme se pose pour acceder a une donnée de B:m_pData qui ne depend pas non dependante du type TYPE mais qui necessite que je connaisse le type reel
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 template <class TYPE> void Component::SetImage(SmartPtr<TYPE> p_pImg) { SmartPtr<B<TYPE>> l_pB(new B<TYPE>()); l_pB->Set(p_pImg); m_pA = l_pB;// m_pA est un SmartPtr<A> }
donc j'en suis a écrire une méthode
J'aimerai remplacer les 3 blocs 'identiques' par une boucle sur les types, a la maniere de boost::mpl ou autre chose.
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 ImageData Component::GetImageData() const { { SmartPtr<B<BYTE>> l_pB = dynamic_pointer_cast<B<BYTE>>(m_pA); if (l_pB) return *l_pB; } { SmartPtr<B<WORD>> l_pB = dynamic_pointer_cast<B<WORD>>(m_pA); if (l_pB) return *l_pB; } { SmartPtr<B<RGBA>> l_pB = dynamic_pointer_cast<B<RGBA>>(m_pA); if (l_pB) return *l_pB; } return ImageData(0); // invalid ImageData }
Quelque chose qui donnerait
Quelqu'un sait-il si c'est possible de faire ca et si oui m'expliquer comment faire ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 ImageData Component::GetImageData() const { for type in {BYTE,WORD,RGBA) { SmartPtr<B<type>> l_pB = dynamic_pointer_cast<B<type>>(m_pA); if (l_pB) return *l_pB; } return ImageData(0); // invalid ImageData }
merci
Vincent
Partager