use D-pointer to detach opencdev.h from implementation