Bonjour à tous,
je suis en train de créer un système d'allocation mémoire en définissant mes propres allocators. Sans rentrer dans les détails je créer plusieurs MACRO pour réaliser des allocations et celle qui me fait me poser des questions est ceci :
La macro CL_IS_POD est en fait std::is_pod<T>::value présent dans <type_traits> sous Visual Studio 2010. En fonction de la valeur retourné j'utilise tel ou tel fonction d'allocation.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 #define CL_IS_POD(type) cl::IntToType<cl::IsPOD<type>::m_value>() #define CL_NEW_ARRAY(type,allocator) cl::NewArray<cl::CArray<type>::m_type>(allocator,cl::CArray<type>::m_count,CL_IS_POD(cl::CArray<type>::m_type))
cl::CArray est un trick template:
La question est plus "Qu'est ce qu'un POD?" j'ai déjà une réponse mais je m'interroge sur mes connaissances des POD car lorsque je fais ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 template<class T> struct CArray{}; template<class T, size_t N> struct CArray<T[N]> { typedef T m_type; static const size_t m_count = N; };
std::is_pod<pod>::value me donne true.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 struct pod { float* p; };
Et avec ceci:
std::is_pod<pod>::value me donne false.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 class pod { float* p; };
Or il n'y a ni constructeur, ni destructeur, ni fonction virtuel membre...
Est-ce normal?
J'ai le même résultat avec std::is_pod et std::tr1::is_pod.
Merci
Partager