La conversion d'un pointeur sur un entier

Je suis en train d'adapter un code existant sur un ordinateur 64 bits. Le principal problème est que dans une fonction, la précédente codeur utilise un void* argument qui est converti dans le type adapté à la fonction elle-même. Un court exemple:

void function(MESSAGE_ID id, void* param)
{
    if(id == FOO) {
        int real_param = (int)param;
        //...
    }
}

Bien sûr, sur un ordinateur 64 bits, j'obtiens l'erreur:

error: cast from 'void*' to 'int' loses precision

Je voudrais corriger ce afin qu'il fonctionne encore sur un ordinateur 32 bits et aussi proprement que possible. Une idée ?

  • Je sais que c'est déterrer un vieux post, mais il semble que l'on a accepté la réponse n'est pas tout à fait correct. Un exemple concret de size_t pas de travail est i386 segmentation de la mémoire. Si une machine 32 bits, sizeof retourne 2 pour size_t. Alex réponse ci-dessous s'affiche correctement. Alex réponse et uintptr_t fonctionne à peu près partout, et sa maintenant la norme. Il fournit un de C++11) de traitement, et il donne même le C++03-tête des gardes.
InformationsquelleAutor PierreBdR | 2008-09-30