Ich habe ein Problem. Ich versuche, eine void * in std :: -Funktion zu konvertieren. Dies ist nur ein einfaches Beispiel, werden alle VorschlägeCasting void * zu Std :: Funktion
#.h file
class Example {
public:
Example();
int foo(void* hi);
int fooFunc(std::function<int(int, int)> const& arg, int x, int y) {
foo(arg.target<void*>(), x, y);
return 2;
}
};
#.cpp file
Example::Example() {
}
int Example::foo(void * func, int x, int y)
{
//cast back to std::function
func(x, y);
std::cout << "running in foo: " << a << "\n";
return a;
}
Jedes Casting Ich habe versucht, funktionierte nicht geschätzt werden.
Ich weiß, dass ich in diesem Beispiel eine std::function
senden kann, aber es ist für etwas größeres und ich arbeite an einem Beispiel, um es hier arbeiten zu lassen.
Die ganze Bedeutung von void*
, ist für manchmal zu verwenden, in diesen Situationen, wenn Sie nicht wissen, was Sie erhalten werden, und dann werfen Sie es auf die spezifische Verwendung, die Sie benötigen.
Danke!
Warum tun Sie das? Von was kommt die 'void *' (etwas 'dlsym'?). Beachten Sie, dass Verschlüsse größer als ein Zeiger sind. –
Einige dsystem lib. Wenn ich nicht müsste. Ich hätte es nicht getan – Mumfordwiz
Es ist nicht möglich, ein 'void *' in einer 'std :: function' zu speichern, weil es nicht aufrufbar ist. Ihr Aufruf an "target" gibt immer einen Nullzeiger zurück. –