So habe ich diesen Code:Wie eine extern "C" Funktionszeiger deklarieren
#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));
}
Und diesen Fehler erhalten:
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
So ist dieser Fehler, weil 'log' extern „C "d in math.h
Ich fragte mich, wie ich meine Funktion Pointer-Argument in foo() deklarieren, so dass es externe" C "'d Funktionen behandelt.
nicht, dass es Ihre Frage beantwortet, aber diese besondere Situation erfordert nicht "boost :: bind", "std :: bind2nd" würde die Arbeit gut machen. –