2011-03-29 35 views
1

下面的代码编译完美:使用模板圆形夹杂

// MyFile.h 

#ifndef MYFILE_H_INCLUDED 
#define MYFILE_H_INCLUDED 

template <typename Datatype> 
class MyClass 
{ 
    public: 
    void MyMethod(); 
} 

#include "MyFile.cpp" 

#endif 

// MyFile.cpp 

#ifndef MYFILE_CPP_INCLUDED 
#define MYFILE_CPP_INCLUDED 

#include "MyFile.h" 

template <typename Datatype> 
void MyClass<Datatype>::MyMethod() 
{ 
    // ... 
} 

#endif 

的其它方法和函数的定义可以从声明中相同的方式进行分离。使用这种方法有什么缺点吗?这种行为可以依赖吗?

+0

什么是你想在这里完成? – ltc 2011-03-29 04:15:11

+0

@GMan是'.tpp'这种事情的“标准”文件扩展名,或者它可能只是任何不会被编译的东西? – Maxpm 2011-03-29 04:17:43

+0

标准有点强。比较常见的是更好的描述。 – 2011-03-29 04:19:30

回答

2

如果包含MyFile.tpp(我将其重命名为.cpp),则不需要包含MyFile.h。一个文件就像将它的内容完全复制到它所包含的文件中一样。除此之外,通常的做法是稍微组织标题。 (尽管你不需要在MyFile.tpp中包括的得分后卫,因为它应该永远只包括从另一头直接(如GMAN说的)。)

5
  • 重命名文件“MYFILE.CPP”到“MyFile的.tpp”。
  • 删除包括“MyFile.tpp”卫士
  • 更改包括“MyFile.h”,所以它是“MyFile.tpp”
  • 删除的包括内部“MyFile.tpp”

注意:由于该文件是* .tpp文件(不是* .cpp),因此不应该包含在其他构建系统操作中。如果您已手动添加,请将其删除。

确保包括<X> .tpp的唯一地方是在<X>最后一行.H