Когда правильно хранить указатели в целых числах?Это правильно, когда вы воспринимаете это так, как оно есть: использование поведения, специфичного для платформы или компилятора.
Проблема заключается только в том случае, если в вашем приложении замусорен код, специфичный для платформы / компилятора, и вам необходимо перенести кодна другую платформу, потому что вы сделали предположения, которые больше не верны.Изолируя этот код и скрывая его за интерфейсом, который не делает никаких предположений о базовой платформе, вы устраняете проблему.
Поэтому, пока вы документируете реализацию, отделяйте его за независимым от платформы интерфейсом с помощью дескрипторов или чего-то ещеэто не зависит от того, как он работает за кулисами, а затем заставляет код компилироваться условно только на платформах / компиляторах, где он был протестирован и работает, тогда нет никаких причин для того, чтобы вы не использовали какую-либо магию вуду, с которой вы столкнулись.Вы можете даже включать большие куски ассемблера, собственные вызовы API и системные вызовы ядра.
Тем не менее, если ваш «переносной» интерфейс использует целочисленные дескрипторы, целые числа имеют тот же размер, что и указатели нареализация для определенной платформы, и эта реализация использует указатели внутри, почему бы просто не использовать указатели в качестве целочисленных дескрипторов?Простое приведение к целому числу имеет смысл в этом случае, потому что вы исключаете необходимость какой-либо таблицы поиска дескриптора / указателя.