Как определено текущим стандартом C ++, нет целочисленного типа, который гарантированно будет содержать указатель. Некоторые платформы будут иметь intptr_t, но это не стандартная функция C ++. По сути, обработка битов указателя, как если бы они были целыми числами, не является переносимым делом (хотя это может быть сделано для работы на многих платформах).
Если причина приведения в том, чтобы сделать указатель непрозрачным, тогда void * уже достигнет этого, поэтому код мог бы использовать void * вместо int. Typedef может сделать это немного лучше в коде
typedef void * handle_t;
Если причина приведения состоит в том, чтобы сделать арифметику указателей с гранулярностью байтов, то, вероятно, лучший способ - привести к (char const *) и выполнить с этим математические вычисления.
Если причина приведения заключается в достижении совместимости с какой-либо существующей библиотекой (возможно, более старым интерфейсом обратного вызова), которую нельзя изменить, то я думаю, что вам необходимо просмотреть документацию для этой библиотеки. Если библиотека способна поддерживать необходимые вам функции (даже на 64-битной платформе), то в ее документации может быть указано предполагаемое решение.