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:
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:
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:
1
2
3
4 struct pod { float* p; };
Et avec ceci:
std::is_pod<pod>::value me donne false.Code:
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