Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 包括模板头解决方案_C++_Templates_Include - Fatal编程技术网

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
的末尾,而不是开头

此外,您仍应将函数标记为
内联

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

  • 这是尝试输入FAQ吗?:)我不想问你是不是很可怕。不要包含
    .cpp文件。相反,在头文件中内联定义模板,完全放弃实现文件。你这样做肯定不是一个可怕的人……这并不是在说什么<代码>#include
    只是文本替换;这种方法相当于直接在标题中编写模板定义,这是非常容易理解的建议。这是对常见问题的尝试吗?:)我不想问你是不是很可怕。不要包含
    .cpp文件。相反,在头文件中内联定义模板,完全放弃实现文件。你这样做肯定不是一个可怕的人……这并不是在说什么<代码>#include
    只是文本替换;这种方法相当于直接在标题中写入模板定义,这是一种非常容易理解的建议。通常您将其命名为
    templates\u impl.h
    或类似名称,因为
    .cpp
    文件通常是为编译单元保留的。您通常将其命名为
    templates\u impl.h
    或类似名称,因为
    .cpp
    文件通常是为编译单元保留的。优点,尤其是第2点。谢谢-现在我知道为什么这是可以接受的,但不完全是“解决方案”。好的观点,特别是第2点。谢谢-现在我知道为什么它是可以接受的,但不完全是“解决方案”。