首页 >后端开发 >C++ >模板化 C 类可以拆分为单独的头文件和实现文件吗?

模板化 C 类可以拆分为单独的头文件和实现文件吗?

Linda Hamilton
Linda Hamilton原创
2024-12-13 18:55:10438浏览

Can Templated C   Classes Be Split into Separate Header and Implementation Files?

将模板化 C 类拆分为单独的 .hpp 和 .cpp 文件可行吗?

尝试跨单独标头编译模板化 C 类时(.hpp) 和实现 (.cpp) 文件,您可能会遇到链接错误。考虑以下代码:

// stack.hpp
template <typename Type>
class stack {
    // ...
};
// stack.cpp
template <typename Type> stack<Type>::stack() {
    // ...
}
// main.cpp
#include "stack.hpp"
stack<int> s;

编译失败,模板类方法出现“未定义引用”错误。尽管可能,将所有方法实现移至头文件中并不是理想的解决方案。

为什么模板类单独编译失败

问题源于以下事实:模板类在编译时未完全定义。编译器根据提供的模板参数生成特定实例化的代码。如果没有模板参数,编译器无法为实现文件中的方法生成内存布局和代码。

替代方案:分离数据结构和算法

隐藏实现细节在保持分离的同时,考虑将数据结构与算法分开。模板类应主要定义数据结构,而非模板化算法类则对其进行操作或使用。这种方法有效地隐藏了有价值的实现细节,而不需要模板类的单独实现文件。

以上是模板化 C 类可以拆分为单独的头文件和实现文件吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn