2016-10-13 21 views
0

Я использую большой пакет физики Geant4 для запуска моделирования. Существует несколько типов typedef, определенных на этом языке, и используется исключительно по всему пакету.Typedef числовых типов

typedef double G4double; 
typedef float G4float; 
typedef int G4int; 
typedef bool G4bool; 
typedef long G4long; 

Я понимаю использование определений типов для обнажая числовых типов в качестве доменных конкретных типов, так как это улучшает читаемость и позволяет ЬурейеЕ быть изменен на более позднем этапе, если это необходимо. В этом случае, однако, typedefs настолько широки, что они не служат этой цели.

Я также слышал о typedefs, которые используются для обеспечения согласованной битрейта каждого типа, так как sizeof(int) не гарантируется стандартом. Это не может быть в этом случае, поскольку эти typedef всегда присутствуют, а не генерируются скриптом после проверки размера рассматриваемого типа.

Какие еще цели могут быть, что я отсутствую?

ответ

0

Некоторые библиотеки любят делать это, чтобы поддерживать согласованность в своем коде. Все типы, которые они используют (даже примитивы), начинаются с G4.

В теории вы можете переопределить их на определенных платформах, если размер какого-то примитивного типа вызывает проблему.

Лично я никогда не слышал о том, что кто-то должен это делать. Если требуются конкретные размеры, они обычно используются в первую очередь. Но это не значит, что этого не произошло.

0

Невозможно для меня указать, почему эта конкретная библиотека сделала это. Тем не менее, я сделал аналогичный в моей библиотеке, и я могу дать несколько причин, некоторые из которых вы уже упомянули:

  1. Это позволяет повысить кросс-платформенную переносимость без xintxx_t типов плавающих вокруг.
  2. Это позволяет вам менять типы - возможно, во время сборки. Примером этого является то, что если вы хотите иметь 3D-движок, поддерживающий как однократную, так и двойную поплавковую точность, вы можете объявить typedef float MyLibraryFloat; или typedef double MyLibraryFloat;, вызванный макросом define.
  3. Это может помочь абстракции библиотеки. Скажем, у вас есть библиотека, которая выступает в качестве интерфейса для нескольких разных библиотек (в основном) совместимых API. Тезисы типов могут помочь в этом, хотя в этом случае часто бывает не так просто, как typedef.

Я думаю, что лучшая причина - вторая. Это определенно наиболее полезно, если вы имеете дело с ситуацией, когда ваши типы могут меняться в зависимости от настроек компилятора. Однако первый из них распространен, особенно в старых программах на С. OpenGL/GLUT делает абстрагирование типов для обеспечения безопасности по размеру.

Смежные вопросы