2016-10-13 9 views
0

私はシミュレーションを実行するために大規模な物理パッケージGeant4を使用しています。言語で定義された多数のtypedefがあり、パッケージ全体で独占的に使用されています。数値型のtypedef

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

これは読みやすさを向上させ、必要に応じてのtypedefは、後の時点で変更することができますように私は、ドメイン固有の型として数値型を露出させるためのtypedefを使用することを理解しています。しかし、この場合、typedefは非常に広く、その目的には役立たない。私もtypedefのを聞いたことがある

sizeof(int)が標準で保証されていないとして、各タイプの一貫性のビットサイズを確保するために使用されています。これは、問題の型のサイズをチェックした後にスクリプトによって生成されるのではなく、これらの型定義が常に存在するため、このようにすることはできません。私が行方不明だということがあるかもしれない他のどのような目的で

答えて

0

一部のライブラリは、コード内で一貫性を維持するためにこれを行うのが好きです。使用するすべてのタイプ(プリミティブさえも)はG4で始まります。いくつかのプリミティブ型の大きさが問題となる場合

理論的には、これらは特定のプラットフォームで再定義することができます。

個人的に、私は、このような操作を行うために必要とする誰かのことを聞いたことがありません。特定のサイズが必要な場合は、最初に一般的に使用されます。しかし、それは起こっていないことを意味しません。

0

なぜ私はこの特定のライブラリがこれをしたのかを述べることは不可能です。しかし、私は自分のライブラリーに似て行っている、と私はあなたがすでに言及したそのうちのいくつかは、いくつかの理由を与えることができます:それはあなたがxintxx_t種類が漂っことなく、クロスプラットフォームの移植性を向上させることができます

  1. これは、おそらくビルド時に型の入れ替えを可能にします。たとえば、単精度浮動小数点精度と倍精度浮動小数点精度の両方をサポートする3Dエンジンを使用する場合は、定義マクロによってtypedef float MyLibraryFloat;またはtypedef double MyLibraryFloat;がトリガーされると宣言することができます。
  2. ライブラリの抽象化に役立ちます。 (ほとんど)互換性のあるAPIを持ついくつかの異なるライブラリのフロントエンドとして機能するライブラリがあるとします。この場合、タイプを抽象化すると助けになることがありますが、しばしばtypedefというように単純ではありません。

私は最高の理由が第二だと思います。コンパイラの設定に基づいて型が変更される状況に対処する場合は、間違いなく最も便利です。しかし、最初のものは、特に旧式のCプログラムでは共通しています。 OpenGL/GLUTでは、サイズの安全性のために型の抽象化が行われています。

関連する問題