将模板化 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中文网其他相关文章!