C++ 使用宏编译时使用用户定义的数学函数,或者只使用c+中标准数学库中的函数+;

C++ 使用宏编译时使用用户定义的数学函数,或者只使用c+中标准数学库中的函数+;,c++,macros,C++,Macros,我有一个f_sin(x)函数的自己的实现(类似于sin(x)in的实现),当使用名为MYMATH的宏编译时,我想使用它。如果没有定义MYMATH,我想使用math.h中的函数sin(x) 有关于如何进行的线索吗 注意:我无法更改f_sin(x)或sin(x)的函数定义中的任何内容。您可以这样做: double sin_wrapper(double x) { #ifdef MYMATH return f_sin(x); #else return std::sin(x); #

我有一个f_sin(x)函数的自己的实现(类似于sin(x)in的实现),当使用名为MYMATH的宏编译时,我想使用它。如果没有定义MYMATH,我想使用math.h中的函数sin(x)

有关于如何进行的线索吗


注意:我无法更改f_sin(x)或sin(x)的函数定义中的任何内容。

您可以这样做:

double sin_wrapper(double x) {    
#ifdef MYMATH
    return f_sin(x);
#else
    return std::sin(x);
#endif
}

然后将对
sin的所有调用替换为对此包装器的调用。

您可以这样做:

double sin_wrapper(double x) {    
#ifdef MYMATH
    return f_sin(x);
#else
    return std::sin(x);
#endif
}

然后将对
sin的所有调用替换为对此包装器的调用。

您可以尝试对每个函数使用宏,然后根据宏MYMATH定义它。此外,如果您希望避免使用此类宏,则可以使用通用lambda作为包装器

MyMath.hpp

1.-每个函数都有宏

#ifdef MYMATH
#define imp_sin(x) f_sin(x)
#else
#include <cmath>
#define imp_sin(x) std::sin(x)
#endif

您可以尝试为每个函数使用宏,然后根据宏MYMATH定义它。此外,如果您希望避免使用此类宏,则可以使用通用lambda作为包装器

MyMath.hpp

1.-每个函数都有宏

#ifdef MYMATH
#define imp_sin(x) f_sin(x)
#else
#include <cmath>
#define imp_sin(x) std::sin(x)
#endif

如果我只想使用名称f_sin(x),当MYMATH没有定义时,它将调用std::sin(x),当MYMATH被定义时,它将调用f_sin(x)。这可能吗?请注意,我无法更改函数定义中的任何内容。@DeepakKiran然后将包装重命名为f_sin,并将示例中对f_sin的调用替换为implementation@DeepakKiran我错过了“不改变函数定义”。但是我不明白你想要什么。也许可以编辑这个问题,以澄清您可以更改什么,不可以更改什么,以及您希望调用的外观如何如果我只想使用名称f_sin(x),当未定义MYMATH时,该名称将调用std::sin(x),当定义MYMATH时,该名称将调用f_sin(x)。这可能吗?请注意,我无法更改函数定义中的任何内容。@DeepakKiran然后将包装重命名为f_sin,并将示例中对f_sin的调用替换为implementation@DeepakKiran我错过了“不改变函数定义”。但是我不明白你想要什么。或许可以编辑问题,以澄清您可以更改哪些内容,不可以更改哪些内容,以及您希望电话的外观