Aggiungo una cosa. Ma questi std::function ti incapsulano anche l'oggetto su cui chiamare il metodo? Perché nel caso non lo facessero (a meno che tu non abbia altri modi tipo "l'oggetto è globale") non ti conviene passare in "void *user_data" direttamente l'oggetto (invece che la funzione) e poi nella callback checkData chiami il metodo della classe? E anche se std::function incapsulasse l'oggetto su cui chiamare il metodo, sinceramente non vedo la ragione di passare la funzione invece dell'oggetto.
Cioè:
codice:
void CL_CALLBACK checkData(cl_event event, cl_int status, void* data) {
MyObject *obj = (MyObject *)data;
obj->myfunction(....);
}
callbackEvent.setCallback(CL_COMPLETE, &checkData, (void*)obj);
P.S. Se ti serve ancora quell' "int *buffer_data" ovviamente puoi agganciarlo a un nuovo campo di MyObject oppure fai una struttura con 2 campi (uno per per l'int *buffer_data e l'altro per l'oggetto). Tuttavia la struttura la dovresti allocare/disallocare, ti conviene appoggiarti a un campo dell'oggetto che invece esiste già.