- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
请引用this question about implementing templates.中第一个答案
具体来说,请注意这句话
A common solution to this is to write the template declaration in a header file, then implement the class in an implementation file (for example .tpp), and include this implementation file at the end of the header.
我把我最感兴趣的部分加粗了。
.tpp 文件有什么意义?我尝试完全按照该页面中的建议进行操作并且它起作用了。但是后来,我将文件扩展名更改为任何随机乱码(如 .zz 或 .ypp),它仍然有效!它应该工作吗?它是 .tpp 还是任何其他扩展名有关系吗?为什么不使用 .cpp?
这是我感到困惑的另一件事。
如果我的实现是用 .cpp 编写的,并且 header 定义了非模板函数,那么我只需要编译一次 .cpp 文件,对吗?至少在我更改 .cpp 文件中的某些内容之前。
但是如果我有一个定义模板函数的头文件并且我的实现在一个带有随机时髦扩展名的文件中,它是如何编译的?每次我编译 #include
所述 header 的任何源代码时,这些实现是否编译?
最佳答案
Does it matter if it's .tpp or any other extension? And why not use a .cpp?
扩展名是什么并不重要,但不要使用 .cpp
因为它违反约定(它仍然可以工作,但不要这样做;.cpp
文件一般是源文件)。除此之外,这取决于您的代码库使用什么。例如,我(和 Boost 代码库)为此目的使用 .ipp
。
What's the significance of a .tpp file?
当您不希望包含模块接口(interface)的文件包含所有血淋淋的实现细节时使用它。但是您不能在 .cpp
文件中编写实现,因为它是一个模板。所以你会尽力而为(不考虑显式实例化等)。例如
Something.hpp
#pragma once
namespace space {
template <typename Type>
class Something {
public:
void some_interface();
};
} // namespace space
#include "Something.ipp"
Something.ipp
#pragma once
namespace space {
template <typename Type>
void Something<Type>::some_interface() {
// the implementation
}
} // namespace space
I thought the whole point of writing definitions in headers and the implementations in a separate file is to save compilation time, so that you compile the implementations only once until you make some changes
您不能将通用模板代码拆分到一个实现文件中。您需要完整的代码可见才能使用模板,这就是为什么您需要将所有内容都放在头文件中的原因。有关更多信息,请参阅 Why can templates only be implemented in the header file?
But if the implementation file has some funky looking file extension, how does that work in terms of compiling? Is it as efficient as if the implementations were in a cpp?
您不编译.tpp
、.ipp
、-inl.h
等文件。它们就像头文件一样,只是它们只被其他头文件包含。您只编译源文件(.cpp
、.cc
)文件。
关于c++ - 为什么在实现 header 中定义的模板化函数和类时使用 "tpp"文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44774036/
我已经开始使用 Doxygen(预编译 1.8.14)为我在 Windows 10 上的 C++ 项目生成简单的代码文档。 在一个头文件中,我定义了三个模板函数,我的定义放在一个包含在头文件末尾的 .
在编写模板类时,我喜欢将实现移动到不同的文件(myclass.tpp)中,并将其包含在主标题的底部(myclass.hpp)。 我的问题是:我需要在 .tpp 文件中包含守卫,还是在 .hpp 文件中
我想将图像放在 tpp 中推介会。我正在使用下面的代码来显示图像 --exec shotwell Desktop/a.png 但是,当我运行 tpp filename.tpp 时,它会向我显示以下错误
请引用this question about implementing templates.中第一个答案 具体来说,请注意这句话 A common solution to this is to wri
来自 https://stackoverflow.com/a/11467040/1442443 的问题 我的最终目标是转储用户空间堆栈。 我尝试将如下所示的 cpp 文件构建为 android 平台上
我在 Linux 环境 (Redhat) 上安装 TPP 软件时遇到了一些问题。错误信息如下所示: perl -c -I ../../build/RedHat-x86_64 ../../build
我正在 Visual Studio 2013 Express 中实现一个带有头文件和实现文件的类模板。但是,我的实现文件(具有 .tpp 扩展名)没有启用 IntelliSense。有没有办法为这个文
我是一名优秀的程序员,十分优秀!