私のコードでは、複数のデータ型の可能性をどのように扱うべきですか?コンパイル時に異なるデータ型オプションを扱うには?
私はここで、二重またはフロートタイプを使用してコンパイルすることも可能になりたいが、私は現時点では使用したコードは次のとおりです。
#define USE_FLOAT_PRECISION
...
#ifdef USE_FLOAT_PRECISION
typedef float DATATYPE;
#define GL_DATATYPE GL_FLOAT
#else
typedef double DATATYPE;
#define GL_DATATYPE GL_DOUBLE
#endif
...
DATATYPE somevar;
...
for(...){
for(...){
...
somevar *= (DATATYPE)1.02; // is this good?
...
}
}
...
glVertexPointer(3, GL_DATATYPE, ... // can this be done better?
...
これはうまく動作しますが、私はでキャストと悪いものがあると感じ(DATATYPE)は、私が使っているすべての場所についても、醜く見えますが、それはすべての場所に貼り付けるのが面倒です。他の解決策?
編集:私は私のコードで倍精度とfloat値を表現したが、その後(フロート)に変換する必要があるため(DATATYPE)
にキャスティングについてイム懸念理由は、後には、これにダブルから変換する恐れイムフロートはいくつかの問題を引き起こすでしょう。また、その効率的な、iveがstatic_castがより速いか、何かを聞いたかどうかはわかりません。しかし、どうして私はそれを使うべきなのかわからないし、私はここでそれを使うべきです。
。 DATATYPE_CREATE(0.5)は、アクセスのための関数型マクロの使用のみです。これにより、float型のキャスト以上の実装が可能になります。例えば。ハードウェア浮動小数点のないプラットフォーム上のクラスになる可能性があります。 – Hybrid
はテンプレートの仕事のように聞こえる、いいえ? – stijn
コンパイラは、コンパイル時に定数を浮動小数点に変換する必要があります。また、%fと%Lfを区別するために、sprintfタイプのものを処理するために余分なマクロが必要な場合があります。 – Hybrid