Writing from the point of view of someone working mainly with languages
other than C++: if you make the code very C++ specific, it will be
hardly usable in other programming languages. By "specific" I mean
depending heavily on the preprocessor, templates, etc.
From my experience of implementing a Firebird driver (client library)
for the Dart language, I can say I struggled a bit with mapping the
Firebird client interfaces to plain function pointers, to be used by
Dart FFI (foreign function interface). Fortunately, the FB client
library has object-oriented logic, but is not C++-specific, and can be
accessed from other languages (its implementation is in C++, but the
interfaces contain method tables with plain C function pointers, blessed
be whoever came up with this idea). That's what I mean by not being
C++-specific. If, instead of the interfaces, libfbclient just exported a
bunch of C++ classes, it would be _way_ harder to use it outside C++.
I don't have anything against C++ (even used to teach it at academia and
shipped some software written in it), but the memory layout of C++
objects is compiler-specific, and passing objects even between code
compiled with different C++ compilers on the same platform (e.g. MSVC vs
gcc vs clang on Windows), and using them on the other side as fully
functional objects, not just opaque pointers, is hardly possible. As
long as C++ ABI is not fully standarized, that's how things are going to be.
So, if you design your library in such a way that its functionality can
be wrapped in a set of plain C functions (I don't mean it needs to be
implemented in C, just that its functionality can be expressed as a set
of extern "C" functions, exported from a dynamic library and imported by
code in another language, which usually supports only the C ABI), the
potential application of your tool will be much wider than just C++
code. I don't even mean you should provide the plain C interface, just
design the functionality so that it would be possible for somebody else
to create one.
I don't have any specific numbers close at hand, but I guess nowadays
C++ is not the first choice language for business applications.
That is just my personal opinion, I don't want to start a religious war
on which language is better and should be used no matter what (there's
no such thing as "better in every way and for every application" when it
comes to programming languages), so please treat it just as my personal
piece of advice, expressed with much sympathy for your project.
best regards
Tomasz