C++ 包括模板头解决方案
我在编程方面有多差?我是一个可怕的人吗C++ 包括模板头解决方案,c++,templates,include,C++,Templates,Include,我在编程方面有多差?我是一个可怕的人吗 //templates.cpp template <typename TYPE> void some_func(int arg1, ...) { //do stuff } //templates.cpp 模板无效某些函数(int arg1,…) { //做事 } 然后: //templates.h #包括ifndef模板 #定义包含的模板 #包括“templates.cpp” 模板无效某些函数(int arg1,…); #恩迪夫 最后
//templates.cpp
template <typename TYPE> void some_func(int arg1, ...)
{
//do stuff
}
//templates.cpp
模板无效某些函数(int arg1,…)
{
//做事
}
然后:
//templates.h
#包括ifndef模板
#定义包含的模板
#包括“templates.cpp”
模板无效某些函数(int arg1,…);
#恩迪夫
最后:
//main.cpp
#include "templates.h"
int main ...
some_func<int>(5);
std::fprintf(stderr, "ZOMG IT WORKT!\n!\n!\n!");
//main.cpp
#包括“templates.h”
int main。。。
一些函数(5);
std::fprintf(stderr,“zomgit-WORKT!\n!\n!”);
这对我来说很好。这似乎解决了我们N00B中的许多人所面临的一个无休止的问题,即如何正确地将.cpp和.h文件分离为模板,然后在没有编译器错误的情况下包含它们
templates.h文件中的include“templates.cpp”行基本上等同于将声明和源代码全部包含在一个文件中。但这种方法很好地将它们分开,这似乎是我们都在寻找的。这实际上是一种非常常见的方法,只是我认为你应该把
#include "templates.cpp"
在*.h
的末尾,而不是开头
另外,您仍然应该将函数标记为
内联
,这实际上是一种非常常见的方法,只是我认为您应该将
#include "templates.cpp"
在*.h
的末尾,而不是开头
此外,您仍应将函数标记为内联
.ipp
,其他人可能使用.inl
.ipp
,其他人可能使用.inl
这是尝试输入FAQ吗?:)我不想问你是不是很可怕。不要包含
.cpp文件。相反,在头文件中内联定义模板,完全放弃实现文件。你这样做肯定不是一个可怕的人……这并不是在说什么<代码>#include
只是文本替换;这种方法相当于直接在标题中编写模板定义,这是非常容易理解的建议。这是对常见问题的尝试吗?:)我不想问你是不是很可怕。不要包含.cpp文件。相反,在头文件中内联定义模板,完全放弃实现文件。你这样做肯定不是一个可怕的人……这并不是在说什么<代码>#include
只是文本替换;这种方法相当于直接在标题中写入模板定义,这是一种非常容易理解的建议。通常您将其命名为templates\u impl.h
或类似名称,因为.cpp
文件通常是为编译单元保留的。您通常将其命名为templates\u impl.h
或类似名称,因为.cpp
文件通常是为编译单元保留的。优点,尤其是第2点。谢谢-现在我知道为什么这是可以接受的,但不完全是“解决方案”。好的观点,特别是第2点。谢谢-现在我知道为什么它是可以接受的,但不完全是“解决方案”。