2011-12-16 84 views
0

编程有多糟?我是一个可怕的人吗?包括模板头解决方案

//templates.cpp 
template <typename TYPE> void some_func(int arg1, ...) 
{ 
    //do stuff 
} 

然后:

//templates.h 
#ifndef TEMPLATES_H_INCLUDED 
#define TEMPLATES_H_INCLUDED 

#include "templates.cpp" 
template <typename TYPE> void some_func(int arg1, ...); 

#endif 

最后:

//main.cpp 
#include "templates.h" 

int main ... 
some_func<int>(5); 
std::fprintf(stderr, "ZOMG IT WORKT!\n!\n!\n!"); 

它工作正常的我。它似乎解决了我们很多人关于如何正确分离模板的.cpp和.h文件,然后包含它们而没有编译器错误的问题。

templates.h文件中的行#include "templates.cpp"基本上等同于将您的声明和源代码全部包含在一个文件中。但这种方法很好地将它们分开,这正是我们似乎都在寻找的。

+0

这是尝试进入FAQ条目吗? :) – jrok 2011-12-16 19:01:52

+1

这不是一个问题 – 2011-12-16 19:01:59

+0

如果你太可怕,我会避免问互联网。不要包含`.cpp文件。相反,在头文件中内联定义模板并完全放弃实现文件。 – AJG85 2011-12-16 19:02:35

回答

3
  1. 通常带有模板实现的文件被赋予不同的扩展名。例如boost使用.ipp,其他人可能使用.inl
  2. 这不是我们真正想要的。我们需要的是独立编译模板的实现以减少编译时间依赖性。
2

这实际上是一个很常见的做法,但我觉得你应该把

#include "templates.cpp" 

*.h年底而不是开头。

此外,您仍然应该将函数标记为inline