包括模板头

Including template headers SOLUTION

本文关键字:包括模      更新时间:2023-10-16

我的编程水平有多差?我是一个很糟糕的人吗?

//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文件的模板,然后包括他们没有编译器错误的无休止的问题。

template .h文件中的#include "templates.cpp"行基本上相当于将声明和源代码都包含在一个文件中。但是这个方法很好地把它们分开了,这就是我们似乎都在寻找的。

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

这实际上是一种很常见的方法,除了我认为你应该把

#include "templates.cpp"

放在*.h结尾,而不是开头。

同时,你仍然应该将函数标记为inline