Использование пользовательских математических функций при компиляции с макросом или просто использование функции из стандартной математической библиотеки в c ++ - PullRequest
1 голос
/ 30 января 2020

У меня есть собственная реализация функции f_sin (x) (аналог реализации sin (x) in), которую я хочу использовать при компиляции с макросом MYMATH. Если MYMATH не определен, я хочу использовать функцию sin (x) из math.h

Любые указания о том, как go о?

Примечание. Я не могу ничего изменить в определения функций f_sin (x) или sin (x).

Ответы [ 2 ]

3 голосов
/ 30 января 2020

Вы можете сделать это следующим образом:

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

и затем заменить все вызовы на sin вызовами на эту оболочку.

1 голос
/ 30 января 2020

Вы можете попробовать использовать макрос для каждой функции, а затем просто определить его в зависимости от вашего макроса MYMATH. Также, если вы предпочитаете избегать такого рода макросов, вы можете использовать generic c lambda в качестве оболочки.

MyMath.hpp

1.- С макросами для каждой функции

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

2. С generi c лямбда (C ++ 14)

#define glambda(x) [](auto y){ return x(y); }
#ifdef MYMATH
auto imp_sin = glambda(f_sin);
#else
#include <cmath>
auto imp_sin = glambda(std::sin);
#endif
#undef glambda //Or not if you want to keep this helper

Основное использование. cpp

#include "MyMath.hpp"
int main(int, char**) {
  imp_sin(3.4f);
  return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...