reinterpret_casts
sont utilisés pour les distributions définies par l'implémentation de bas niveau. Selon la norme, reinterpret_casts
peut être utilisé pour les transformations suivantes (C++ 03 05/02/10):
- pointeur vers un type intégral
- type intégral à pointeur
- Un pointeur vers une fonction peut être converti en un pointeur vers une fonction d'un type différent
- un pointeur vers un objet peut être converti en un pointeur vers un objet de type différent
- pointeur sur les fonctions membres ou pointeur vers les membres de données peuvent être converties en fonctions ou objets d'un type différent. Le résultat d'une telle conversion de pointeur n'est pas spécifié, à l'exception du pointeur a reconverti en son type d'origine.
- Une expression de type A peut être convertie en une référence au type B si un pointeur vers le type A peut être explicitement converti en type B en utilisant
reinterpret_cast
.
Cela dit, en utilisant le reinterpret_cast
n'est pas une bonne solution dans votre cas, puisque la coulée à différents types ne sont pas spécifiés par la norme, bien que la coulée char *
-unsigned char *
et retour devrait fonctionner sur la plupart des machines.
Dans votre cas, je pense à utiliser un static_cast
ou non coulée tout en définissant stg
que le type char *
:
template<class ITER_T>
char *copy_binary(
unsigned char length,
const ITER_T& begin)
{
// alloc_storage() returns a char*
char* stg = alloc_storage(length);
std::copy(begin, begin + length, stg);
return stg;
}
De quel type la fonction alloc_storage retourne-t-elle? – zdan