Im Anschluss an diese FrageProblem bei der Verwendung von boost :: bind & boost :: function
How to pass class member functions to a method in a 3rd party library?
Schnell rekapitulieren ist Ich brauche Zeiger auf Funktionen an den Konstruktor einer Klasse moveset in einem dritten genannt passieren Party-Bibliothek mit der Definition von
template <class Space>
moveset<Space>::moveset(particle<Space> (*pfInit)(rng*),
void (*pfNewMoves)(long, particle<Space> &,rng*),
int (*pfNewMCMC)(long,particle<Space> &,rng*))
die Beispiele mit der Bibliothek zur Verfügung gestellt sind, um einfach globale Funktionen für pfInit usw. zu definieren, lassen sie sie nennen f, g und h. Rufen Sie dann smc :: moveset Moveset (f, g, h) aus einer Controller-Klasse auf; bind: mit boost
Ich habe versucht, den Vorschlag umzusetzen. Leider habe ich Schwierigkeiten, dies zur Arbeit zu bringen.
class IK_PFWrapper
{
public:
IK_PFWrapper(Skeleton* skeleton, PFSettings* pfSettings) ;
smc::particle<cv_state> fInitialise(smc::rng *pRng);
...
} ;
in einer Controller-Klasse
IK_PFWrapper testWrapper (skeleton_,pfSettings_);
boost::function<smc::particle<cv_state> (smc::rng *)> f = boost::bind(&IK_PFWrapper::fInitialise, &testWrapper,_1) ;
// the 2nd and 3rd argument will be eventually be defined in the same manner as the 1st
smc::moveset<cv_state> Moveset(f, NULL, NULL);
Der resultierende Compiler-Fehler ist,
Algorithms\IK_PFController.cpp(88): error C2664: 'smc::moveset<Space>::moveset(smc::particle<Space> (__cdecl *)(smc::rng *),void (__cdecl *)(long,smc::particle<Space> &,smc::rng *),int (__cdecl *)(long,smc::particle<Space> &,smc::rng *))' : cannot convert parameter 1 from 'boost::function<Signature>' to 'smc::particle<Space> (__cdecl *)(smc::rng *)'
with
[
Space=cv_state
]
and
[
Signature=smc::particle<cv_state> (smc::rng *)
]
and
[
Space=cv_state
]
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
Jede Hilfe viel
geschätzt
Lese Ihre bisherige [Frage] (http://stackoverflow.com/questions/9997299/how-to-pass-class-member-functions-to-a-method-in-a-3rd-party-library) Ich bin nicht sicher, ob das oben genannte tatsächlich das ursprüngliche Problem löst. Ich habe die ursprüngliche Frage näher erläutert. – Zero