Il wrapper C ++ di JNI è facile da usare e il suo orientamento agli oggetti è ben progettato. Personalmente trovo che la relazione tra gli oggetti JNI sia in qualche modo più visibile e comprensibile rispetto all'interfaccia C (vedi esempi qui).
Come hai sottolineato, se stai facendo un lavoro pesante in C ++ per chiamare alcune funzionalità Java, potresti elaborare un po 'di più il design e usare costruttori / distruttori per automatizzare alcune attività che dovresti scrivere manualmente in C.
Tuttavia, se stai facendo le cose al contrario, chiamando le funzioni native C / C ++ da Java, il C ++ non ti porterà un grande vantaggio: questa interfaccia di chiamata è davvero progettata per chiamare le funzioni C (o le funzioni statiche di C ++ con esposto come "C"). Quindi, se si desidera utilizzare le classi C ++, è necessario organizzare il collegamento tra il mondo statico e gli oggetti creati sul lato C ++.
Ovviamente entrambi possono perfettamente interagire.