[Rcpp-devel] multiple definition problem
Steve Jaffe
sjaffe at riskspan.com
Fri Aug 30 19:38:25 CEST 2013
> > On 24 Aug 2013 at 09:04, romain at r-enthusiasts.com wrote:
> Le 29/08/13 18:59, Steve Jaffe a ?crit :
> > Another alternative is simply to declare such a function as "inline."
>
> I don't think that works and I've had examples to verify this belief.
>
I'd be interested in studying those examples if you could provide them.
What I'm describing refers to C++. The meaning of 'inline' in C is both
different and more complex -- for one thing it differs between the C99
and C89 standards. What I recommended would not necessarily prevent
multiple-definition errors if using a C compiler (but then neither
would using templates be an option -- therefore I am assuming that this
discussion is only about C++)
In order to see why it makes sense for C++ to work this way, consider class member
functions defined inside the class declaration. These are inline by default,
and that is why they do not produce multiple-definition errors although
they are defined in every compilation unit which includes the class declaration
header file.
The existence of 'header-only' libraries in C++ (but not C) is another example. True,
most of these use templates (which also are inline by default -- note that 'inline'
in the C++ sense serves two related but different purposes -- to 'hint' to the compiler
that the code should be inlined, and to *require* the linker to merge multiple definitions.)
But the 'inline'-ness of template functions is what makes this work, and one can
have a header-only C++ library that uses inline functions without templates.
Regards,
Steve
steve_jaffe at yahoo.com
More information about the Rcpp-devel
mailing list