add C++ API