2016-07-27 5 views
0

私は変更できないツールで自動生成される一連のC++ファイルを持っています。これらのファイルは、ユーザーの入力に基づいて実行時にコンパイルされます。これらのファイルは `double f = userInputs;を持ちます。定義。 userInputsは、例えば25uの入力を提供する可能性があるユーザーによって提供されます。自動生成されたファイルには二重のf = 25uが書き込まれます。 今、私はuserInputsでコード内の* 1.06-6の代わりになることを望みます。しかし、これは自動生成され、私のコントロールではありません。浮動小数点数での受け入れ

すべての自動生成コードは、私のコントロール下にあるファイルstdAfx.hを使用しています。このファイルで#defineまたはtypedefを実行して、ユーザが25uと言っても、double f = userInputsの自動生成ファイルが正しくコンパイルされるようにすることはできますか?

+1

どのcpp標準ですか? –

+0

データフローに前処理ステップを追加できますか? –

+0

@ m.s。 [C++ 03]または[C++ 11]タグが使用されていない限り、C++ 14です。 – Quentin

答えて

-1

#define double DoubleWrapperとすることができます。 DoubleWrapperは、コンストラクタをunsigned intとし、内部的に倍精度の倍数として格納します。おそらく、普通のdoubleコンストラクタを追加することもできます。

さらに、キャスト演算子をdoubleに追加すると、内部に格納されている変数が返されます。

ダブルのようなあなたの取り替えの二重の作品はどこにでもいない限り、この方法:

  • あなたがそれを提供し、明示的にキャストすることなく、別のタイプとしてそれを使用unsigned int型
  • 、C++はチェーンされ、複数の暗黙の理由キャスト

プロジェクトの構造によっては、これが許容されているか、あまりにも制限があるかもしれません。これは非標準である、あなたは、キーワードを再定義するべきではありません

  • もあることに注意してください。しかし、すべてのコンパイラはそれを許可します

  • このstdAfx.hがプロジェクトの他の部分で使用されていれば、それが一般的にどのように動作するかを変更するので、難しい問題になることがあります。これはおそらくすべてのファイルで使用されているプリコンパイル済みヘッダーなので、このようにしないでください。
+0

これはひどい考えです。 –

+0

それは恐ろしいです、私は最後の部分でそれについて非常に具体的でした。しかし、それがコードの十分に含まれている部分(pchではなく)にあれば、うまくいくかもしれません。同様に、 '#define'で解決できるかどうかという疑問がありました。その答えははいです。あなたはそれをしてはいけません。 – Dutow

関連する問題