Closed Nagarei closed 9 years ago
個人的には全ヘッダーファイルで
#ifndef NOMINMAX
#define NOMINMAX
#endif
を冒頭につけるべきだと思っているんですが。
あーでも
がらみでsproutみてたらSPROUT_PREVENT_MACRO_SUBSTITUTION
マクロ作ってるな・・・
boostの定義を見たら
#define BOOST_PREVENT_MACRO_SUBSTITUTION
と、ただの空defineだったので、これは候補になると思います。 とりあえず候補を挙げてみます。
とりあえずsproutにならって
https://github.com/Nagarei/DxLibEx/commit/df4e8da313fe025bbff568fadafeb733db1f95ba
で
#define DXLE_PREVENT_MACRO_SUBSTITUTION
を作ってありますが。
正直C++ユーザーにはmin,maxマクロは百害あって一利なしなんですよね。MSが
#if !defined(__cplusplus) || !defined(NOMINMAX)
#ifndef max
#define max(a,b) (((a) > (b)) ? (a) : (b))
#endif
#ifndef min
#define min(a,b) (((a) < (b)) ? (a) : (b))
#endif
#endif //!defined(__cplusplus) || !defined(NOMINMAX)
としてくれるのが一番いいんですが、そんな未来は来ないと思うので
min,maxマクロは悪しき習慣だからNOMINMAXを定義する
に一票ですね・・・。
ちなみにsproutでSPROUT_PREVENT_MACRO_SUBSTITUTION
マクロ使ってるのは
https://github.com/bolero-MURAKAMI/Sprout/blob/master/sprout/net/endian.hpp
これだけっぽいですね。
なので
の並行路線を提案します
では、
の並行路線で行きましょう。
インクルード前にすでにmin.maxが定義されていた場合はどうしましょうか? undefをかけたほうが良いですかね?
undefしつつNOMINMAXを定義するヘッダをつくりましょう。で全部のヘッダーの先頭でincludeすればいいかと
config系のヘッダーではインクルードしてないですけど、問題ないですよね?
問題ないと思います。 closeします
max,minマクロへの対応を協議する
参照:http://d.hatena.ne.jp/yohhoy/20120115/p1 とりあえずはここの回避策3でなんとかなるとは思います。