Circular Inclusion with Templates

后端 未结 2 1856
长发绾君心
长发绾君心 2020-12-30 18:19

The following code compiles perfectly:

// MyFile.h

#ifndef MYFILE_H_INCLUDED
#define MYFILE_H_INCLUDED

template 
class MyClass
{
          


        
相关标签:
2条回答
  • 2020-12-30 18:23

    If you include the MyFile.tpp (I renamed it from .cpp), then you don't need to include the MyFile.h. #includeing a file is like exactly copying it's content into the file where it's included. Other from that, it's a common practice to organize the headers a bit. (Though you don't need the include-guards in the MyFile.tpp, because it should only ever be included from another header directly (like GMan says).)

    0 讨论(0)
  • 2020-12-30 18:46
    • Rename the file "MyFile.cpp" to "MyFile.tpp".
    • Remove the include guards from "MyFile.tpp"
    • Change the include in "MyFile.h" so it is "MyFile.tpp"
    • Remove the the include inside "MyFile.tpp"

    Note: Because the file is a *.tpp file (not *.cpp) it should not be included by other build system operations. If you have added it manually remove it.

    Make sure the only place that includes <X>.tpp is the last line in <X>.h

    0 讨论(0)
提交回复
热议问题