Apple provide metal-cpp which provides direct access to the Metal API from C++. One downside appears to be that manual reference counting must be used, like the bad old days. This is probably not much of an issue if you use wrapper classes around the Metal objects.
At the moment, however, I use Objective-C++ to provide a C++ interface to Metal and this does work with ARC; i.e. in the destroy()
method of the class you can simply assign your id<MTLBuffer>
(or whatever) pointer to nil
and the compiler maintains the reference counts for you.