Nagarei / DxLibEx

DXライブラリC++化プロジェクト
Boost Software License 1.0
31 stars 3 forks source link

max,minマクロの対応 #17

Closed Nagarei closed 9 years ago

Nagarei commented 9 years ago

max,minマクロへの対応を協議する

参照:http://d.hatena.ne.jp/yohhoy/20120115/p1 とりあえずはここの回避策3でなんとかなるとは思います。

yumetodo commented 9 years ago

個人的には全ヘッダーファイルで

#ifndef NOMINMAX
#define NOMINMAX
#endif

を冒頭につけるべきだと思っているんですが。

yumetodo commented 9 years ago

あーでも

11

がらみでsproutみてたらSPROUT_PREVENT_MACRO_SUBSTITUTIONマクロ作ってるな・・・

Nagarei commented 9 years ago

boostの定義を見たら

#define BOOST_PREVENT_MACRO_SUBSTITUTION

と、ただの空defineだったので、これは候補になると思います。 とりあえず候補を挙げてみます。

yumetodo commented 9 years ago

とりあえず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 これだけっぽいですね。

なので

の並行路線を提案します

Nagarei commented 9 years ago

では、

の並行路線で行きましょう。

インクルード前にすでにmin.maxが定義されていた場合はどうしましょうか? undefをかけたほうが良いですかね?

yumetodo commented 9 years ago

undefしつつNOMINMAXを定義するヘッダをつくりましょう。で全部のヘッダーの先頭でincludeすればいいかと

Nagarei commented 9 years ago

config系のヘッダーではインクルードしてないですけど、問題ないですよね?

yumetodo commented 9 years ago

問題ないと思います。 closeします

yumetodo commented 9 years ago

http://stackoverflow.com/questions/4597281/mysql-headers-conflict-with-stl-algorithm-in-c

MySQLでもあったのか、この問題・・・。