模板函数和类在不同文件中的使用
Template functions and class use in different files
我想在一个文件中定义一个模板函数,并在许多文件中使用。这与常规函数原型的工作方式相同吗?所以我可以只定义一次然后把原型包含在其他文件中?我对类有同样的问题,我必须在每个头文件中包括模板类的完整定义,就像我对类一样?如果我在不同的文件中定义了一个模板函数两次,会不会导致错误呢?还是不检查呢?
还有一个问题,模板函数原型的格式是什么?
不,它与常规函数不同。使用常规函数,您可以声明
void foo(int);
void foo(double);
在头文件中定义函数,在某些源文件中定义函数,例如foo.cc
, #在任何必须使用这些函数的源文件中包含头文件,例如bar.cc
,并让链接器完成其余的工作。编译器将编译bar.cc
并生成bar.o
,确信您已经在某处定义了函数,如果您没有定义,那么您将得到一个链接时间错误。
但是如果你使用的是模板:
template <typename T>
void foo(T) ...
试着想象一下它是如何工作的。源文件foo.cc
和bar.cc
是独立的,彼此一无所知,除了它们对它们都#包含的头文件中的内容达成一致(这就是整个想法)。所以bar.cc
不知道foo.cc
是怎么实现的,foo.cc
也不知道bar.cc
会用这些函数做什么。在这个场景中,foo.cc
不知道bar.cc
将为T指定什么类型。那么foo.cc
怎么可能对所有类型名都有定义呢?
它不能,所以这种方法是不允许的。你必须在头文件中有整个模板,这样编译器才能为foo(int)
、foo(string)
、foo(myWeirdClass)
或bar.cc
调用的任何东西创建一个定义,并将其构建到bar.o
中(或者如果模板对该类型没有意义就会抱怨)。
类也是如此。
模板专门化的规则略有不同,但在尝试高级技术之前,您应该掌握基础知识。
参见本FAQ。特别是,第12、13和14项涉及分离模板函数的声明和定义。
- C++ gmock - 我们如何在单元测试 cpp 文件中读取/获取 cpp 文件函数的参数值
- 使用其他头文件函数的头文件
- 创建文件函数是否可以打开仅在WinObj实用程序中的全局目录下列出的设备的句柄?
- 如何指定创建文件函数获取未缓存的结果?
- 标准库头文件函数原型的实现是如何用 c++ 编写的?
- 如何将类对象作为对另一个头文件函数的引用传递
- 读取文件函数lpbuffer和字节以读取澄清
- C++ - 未定义的对多个文件函数的引用
- 使用C++的可视 Unicode 文件函数
- C 创建文件函数错误
- WinAPI 创建文件函数 2.
- 具有CREATE_ALWAYS处置的创建文件函数
- 重写c库文件函数
- 如何使用客户端调用堆栈中的地址从 PDB 检索文件/函数/行号?
- 通过头文件函数将遍历的数据从二进制搜索树加载到Vector中
- 需要帮助无法弄清楚为什么我的头文件函数声明不起作用
- 是否可以在不使用文件函数的情况下使用代码块从文件运行某些用例测试?
- 如何用c++文件函数读写8位整数单位形式的数据
- 在c++中读文件函数如何识别文本文件的结束
- 使用Windows API的c++文件函数