マクロとの競合について
Posted: 2012年10月30日(火) 23:15
maxがwindowsにより定義されている場合、numeric_limitsのmaxなどはコンパイルエラーになりますが、
カッコでくくることにより回避できます。
同様に、自作クラスのメンバ関数に対してこのようにエラーを回避しようとしましたがうまくいきませんでした。
前者がOKで後者がエラーとなるのはなぜなのでしょうか?
また、対策として、undefする、関数名を変える以外に何かありますでしょうか?
カッコでくくることにより回避できます。
#define max ...... //
// 略
{
std::numeric_limits<Type>::max(); // コンパイルエラー
(std::numeric_limits<Type>::max)(); // 問題なし
}
class Camera {
public:
float near();
};
#define near ...... // windef.h
// 略
{
Camera camera;
camera.near(); // コンパイルエラー
(camera.near)(); // コンパイルエラー
}
また、対策として、undefする、関数名を変える以外に何かありますでしょうか?