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.
InformationsquelleAutor Salgar | 2009-08-17