min
がすでにマクロとして定義されている場合、std::min
に電話する方法を教えてください。minがマクロとして定義されているときにstd :: min()を呼び出す方法は?
答えて
(std::min)(x,y)
min
周りの括弧はマクロ展開を防ぎます。これはすべての関数マクロで機能します。
指令の後にコードに#undef min
を使用してください。
#include <...> // bad header that defines `min` macro
#ifdef min
#undef min
#endif
// rest f code.
補遺:あなたはその後min
マクロの値を保持する必要がある場合、あなたはいくつかのコンパイラの非ポータブルソリューションを使用して、一時的にその定義を無効にすることができます。例えば、MicrosoftのC++コンパイラはと思われるpush_macro
pragmaを持っています。
ああ、私は本当にそれをすることはできません。なぜなら何らかの理由でマクロに依存する可能性があるすべてのことを後悔してしまうからです。実際の解決策ではなく、むしろ貧弱なハックです。 :\ – Mehrdad
@Mehrdad:マクロとしての 'min'は、まずはハックです。それを避けるのがベストです。本当にマクロが必要な場合は、「MIN」という名前のものや、衝突しないものを使用してください。 – hammar
@Mehrdad:一時的に無効にするための解決策を掲載しました。しかし、マクロが定義されている場合、テキスト置換はプリプロセッサによって行われ、コンパイラに置き換えられているように、言語が明確に述べているので、ポータブルな解決策はありません。関数の最小値とマクロの最小値を区別するために使用できるC++言語構造はありません。 –
Windowsでは、ウィンドウヘッダーを含める前にNOMINMAX
を定義する必要があります。これは、プリコンパイル済みヘッダーの先頭に配置することをお勧めします。 More info here
あなたは、マクロ定義を避けることができるかもしれない:最初の場所(いずれかのような問題のあるヘッダを含む#define NOMINMAX
又は類似または回避するように構成することによって) に定義を避ける
#undef
これらのオプションを使用できない場合やそれらを使用したくない場合は、括弧を適切に使用して関数型マクロを呼び出すことを避けることができます。
#include <algorithm>
#include <stdio.h>
#define min(x,y) (((x) < (y)) ? (x) : (y))
int main()
{
printf("min is %d\n", (std::min)(3, 5)); // note: the macro version of `min` is avoided
}
これはポータブルであり、私はそれを行うために他の方法をいくつ見つけC.
の暗い、初期の頃から取り組んできました:
方法1:
using std::min;
min(a, b); // uses either the macro or the function (don't add side effects!)
方法2:
#ifndef BOOST_PREVENT_MACRO_SUBSTITUTION
#define BOOST_PREVENT_MACRO_SUBSTITUTION
#endif
...
std::min BOOST_PREVENT_MACRO_SUBSTITUTION(a, b)
- 1. なぜmin属性がngChangeを呼び出すのですか?
- 2. libC++のstd :: minについてのダングリングリファレンスがありません
- 3. 各メンバーのmin()とsecond min()の検索
- 4. tabBarController:shouldSelectViewController:デリゲートが設定されているときに呼び出されない
- 5. CSSメディアはmin-widthとmin-device-widthの両方に矛盾しますか?
- 6. アプリが開いているときを知る方法(onCreateが呼び出されていないとき)
- 7. Python Min-Max関数 - minおよびmax要素を返す引数としてリストする
- 8. ラジオボタンが選択されているときにMEL関数呼び出しが呼び出される
- 9. SQL MinとSec Minの行を持つテーブルを結合する
- 10. クラスのプロパティが設定されているときにメソッドを呼び出す方法はありますか?
- 11. 定義された関数を呼び出す方法は? (Javascript)
- 12. 定義されていない関数を呼び出すsession_register()
- 13. 定義されていない関数を呼び出す
- 14. 定義されていない関数を呼び出すsqlite_open
- 15. C++クラスに定義されているメソッドを直接呼び出す方法を教えてください。
- 16. CMakeを呼び出すときに変数を定義すると、qtcreatorが定義されていることが分かります。
- 17. onReceiveが呼び出されないときに呼び出される
- 18. Hibernate Validator - @Length - minとmaxに別々のメッセージを指定する方法は?
- 19. Meteor Meteor.methods()で定義されたメソッドを呼び出す方法?
- 20. アプリから呼び出すときに関数が定義されていない
- 21. getElementsByClassNameを使用しているときにinnerHTMLが呼び出されない
- 22. loadViewを使用しているときにviewDidLoadが呼び出されない
- 23. mousemoveからクラス関数を呼び出すときにEventObjectが定義されていません
- 24. 定義されていないjQueryエラーのメソッド 'reload'を呼び出すことができません
- 25. double.Epsilon vs std :: numeric_limits <double> :: min()
- 26. Iphone:Popoverコントローラを使用しているときにメソッドが呼び出していないと表示される
- 27. 関数呼び出しで "変数"として指定されている値を使用する方法
- 28. viewWillDisplayearがpopToRootViewControllerAnimatedを呼び出すときに呼び出されない
- 29. JSF getterが呼び出されると期待していないときにJSF getterが呼び出される理由を把握します
- 30. applicationDidBecomeActiveが呼び出されたときにアクティブビューコントローラに通知する方法は?
無慈悲に、標準的な施設に行ってください。 –