parsing of c++ template definitions in separate files

Gunther Piez gupiez at googlemail.com
Thu Apr 26 10:43:56 BST 2012


On 26.04.2012 09:39, Raimar Sandner wrote:
> Hi,
>
> I'm working with a project where most template definitions are in separate 
> *.tpp files (kdevelop-4.3.1). A minimal example follows:
>
> --------------------------------------------------------
> The file main.cpp:
> --------------------------------------------------------
> #include "foo.h"
>
> int main(int argc, char **argv) {
>   Foo<1> f;
> }
> --------------------------------------------------------
> The file foo.h:
> --------------------------------------------------------
> #ifndef FOO_H
> #define FOO_H
>
> template<int R>
> struct Foo
> {
>   void bar();
> };
> #include "foo.tpp"
> #endif // FOO_H
>
> --------------------------------------------------------
> The file foo.tpp:
> --------------------------------------------------------
> template<int R>
> void Foo<R>::bar()
> {
> }
> --------------------------------------------------------
>
> Now when I edit foo.tpp, the semantic analysis cannot resolve the class Foo<R> 
> unless I #include "foo.h". I would like to avoid this workaround because I 
> would need to maintain a private branch of the project. Is there any other way 
> to tell the parser that when editing foo.tpp it should parse foo.h along with 
> it?
IHMO "foo.tpp" should include "foo.h", because it needs it - it doesn't
make sense to include "foo.tpp" but not "foo.h". In your "foo.cpp" file
(assuming that is the file using foo) you should include either "foo.h"
if you don't need the templates or "foo.tpp" if you need them.

This way kdevelop (or any other IDE) knows which files to scan.

You can use include guards in "foo.tpp" too, to make accidental
duplicate inclusion safe.

- Gunther




More information about the KDevelop mailing list