Giusto per aggiungere un po' di carne al fuoco: se hai anche la necessità di dover installare più callback per differenziare in modo da differenziare il comportamento per esigenze specifiche, ricorda che puoi passare anche un oggetto polimorfico come parametro.
In questo modo non hai mille mila callback da scrivere, ma solo una per tutti.
Altra cosa: le eccezioni (se sollevate) non devono uscire dalla callback.
Ti consiglio di modificare la callback così:
codice:void CL_CALLBACK checkData(cl_event event, cl_int status, void* data) { try { MyObject *obj = (MyObject *)data; obj->myfunction(....); } catch (const std::exception& e) { // eventuale informazione da portare all'esterno tramite myObject } }