RE:cint and RogueWave

Masaharu Goto (MXJ02154@nifty.ne.jp)
Wed, 26 Aug 1998 21:37:00 +0900


Carsten,

>you can phrase it like this
>RogueWave consists of many templated classes but is not completely
>template based:
>I think at least 1/3 is templated. If you would like to have a look at
>the sources please tell me.

Template based library is more difficult to precompile because cint DLL can
only include instantiated template class, not template itself.

Looking at number of header files, it is clearly a major work.

>changing to options +P and -p in the rootcint call did not work either.
>
>In a telephone call Rene Brun already explained that this indeed is a problem
>of cint with preprocessor statements and nested include files (for Rogue Wave

>it is defs.h ( included from timer.h ) containing the STARTWRAP ENDWRAP macro

>which simply defines an extern "C" statement.

Let me first clarify that +P -p option and template are completely different
matters.

And now I want to discuss how to preprocess only for the RogueWave headers.
There are a couple of ways to do this.

1) use +P -P suboption.
Suppose you have a.h b.h c.h d.h, doing
$ cint a.h +P b.h c.h -P d.h
causes only b.h and c.h to go through formal preprocessor.
I'm not sure if rootcint supports the same.

2) Use #pragma preprocess
Using #pragma preprocess statement in header file , you can selectively
use preprocessor.

#ifdef __CINT__
#pragma preprocess RW/
#endif

#include "RW/defs.h"
#include "RW/aaa.h"

With '#pragma preprocess [prefix]' command, header file name start with
[prefix] are selectively go through preprocessor.

You already reported +P did not work. I'm afraid the problems do not
disappear only with the preprocessor.

Masaharu Goto