Comment déclarer une extern “C” pointeur de fonction
J'ai donc ce code:
#include "boost_bind.h"
#include <math.h>
#include <vector>
#include <algorithm>
double foo(double num, double (*func)(double)) {
return 65.4;
}
int main(int argc, char** argv) {
std::vector<double> vec;
vec.push_back(5.0);
vec.push_back(6.0);
std::transform(vec.begin(), vec.end(), vec.begin(), boost::bind(foo, _1, log));
}
Et recevez ce message d'erreur:
return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_]);
.............................................................^
%CXX-E-INCOMPATIBLEPRM, argument of type "double (* __ptr64 )(double) C" is
incompatible with parameter of type "double (* __ptr64 )(double)"
detected during:
instantiation of ...5 pages of boost
Donc cette erreur est parce que 'log' est extern "C" " d en mathématiques.h
Je me demandais comment déclarer mon pointeur de fonction argument dans foo() il gère extern "C" " d fonctions.
- non pas que cela répond à votre question, mais cette situation particulière ne nécessite pas de
boost::bind
,std::bind2nd
pour faire le travail tout aussi bien.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez essayer, y compris
cmath
au lieu de cela, et à l'aide destatic_cast<double(*)(double)>(std::log)
(cast nécessaire pour résoudre ledouble
surcharge).Sinon, vous permettra de limiter votre fonction pour
extern C
fonctions. Ce serait le travail commeUne autre façon est de faire
foo
un foncteurEnsuite, vous pouvez passer
foo()
àboost::bind
, et parce qu'il est basé sur un modèle, il acceptera tout de liaison. Il travaillera également avec la fonction des objets, pas seulement avec des pointeurs de fonction.Essayez d'utiliser un typedef: