2

c++11 の std::sin と std::cos がないように見える古いコンパイラでコンパイルしようとしているクライアントがいます。(そして彼らはアップグレードできません) std::sin が sin を指すようにするためにヘッダーの上部に平手打ちするためのある種のクイックフィックスを探しています。私は次のようなことを試してきました

#ifndef std::sin
something something
namespace std{
point sin to outside sin
point cos to outside cos
};
#endif

しかし、私は運がなかった

任意のヒント?ありがとう

4

3 に答える 3

3

原則として、使用するために動作するはずです

#include <math.h>
namespace std {
    using ::sin;
    using ::cos;
}

ただし、これらの関数の一部はおかしな方法で実装されており、代わりに次のようなものを使用する必要がある場合があります。

#include <math.h>
namespace std {
    inline float       sin(float f)        { return ::sinf(f); }
    inline double      sin(double d)       { return ::sin(d); }
    inline long double sin(long double ld) { return ::sinl(ld); }
    inline float       cos(float f)        { return ::cosf(f); }
    inline double      cos(double d)       { return ::cos(d); }
    inline long double cos(long double ld) { return ::cosl(ld); }
}

これらのアプローチはどちらも移植性がなく、機能する場合と機能しない場合があることに注意してください。また、定義されているかどうかをテストできないことに注意してくださいstd::sin。適切なマクロ名を設定する必要があります。

于 2013-10-10T23:07:53.557 に答える