循环包含模板

发布于 2024-10-27 04:44:12 字数 511 浏览 2 评论 0原文

下面的代码可以完美编译:

// 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

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

The following code compiles perfectly:

// 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

The definitions of other methods and functions can be separated from the declarations in the same manner. Are there any downsides to using this approach? Can this behavior be relied upon?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

浅浅淡淡 2024-11-03 04:44:12
  • 将文件“MyFile.cpp”重命名为“MyFile.tpp”。
  • 从“MyFile.tpp”中删除包含防护
  • 更改“MyFile.h”中的包含,使其成为“MyFile.tpp”
  • 删除“MyFile.tpp”内的包含

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

确保包含.tpp 的唯一位置是.h 中的最后一行

  • Rename the file "MyFile.cpp" to "MyFile.tpp".
  • Remove the include guards from "MyFile.tpp"
  • Change the include in "MyFile.h" so it is "MyFile.tpp"
  • Remove the the include inside "MyFile.tpp"

Note: Because the file is a *.tpp file (not *.cpp) it should not be included by other build system operations. If you have added it manually remove it.

Make sure the only place that includes <X>.tpp is the last line in <X>.h

烟─花易冷 2024-11-03 04:44:12

如果您包含 MyFile.tpp(我将其从 .cpp 重命名),则不需要包含 MyFile.h#include文件就像将其内容完全复制到包含它的文件中一样。除此之外,对标题进行一些组织是一种常见的做法。 (尽管您不需要 MyFile.tpp 中的包含保护,因为它应该只直接从另一个标头包含(就像 GMan 所说的那样)。)

If you include the MyFile.tpp (I renamed it from .cpp), then you don't need to include the MyFile.h. #includeing a file is like exactly copying it's content into the file where it's included. Other from that, it's a common practice to organize the headers a bit. (Though you don't need the include-guards in the MyFile.tpp, because it should only ever be included from another header directly (like GMan says).)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文