将模板化 C 类拆分为 .hpp/.cpp 文件:可能吗?
问题:
尝试将模板化的 C 类拆分为 .hpp 和由于未定义对构造函数和析构函数的引用,.cpp 文件会导致编译错误符号。
main.cpp:(.text+0xe): undefined reference to 'stack<int>::stack()' main.cpp:(.text+0x1c): undefined reference to 'stack<int>::~stack()'
代码:
stack.hpp
#ifndef _STACK_HPP #define _STACK_HPP template <typename Type> class stack { public: stack(); ~stack(); }; #endif
st ack.cpp
#include <iostream> #include "stack.hpp" template <typename Type> stack<Type>::stack() { std::cerr << "Hello, stack " << this << "!" << std::endl; } template <typename Type> stack<Type>::~stack() { std::cerr << "Goodbye, stack " << this << "." << std::endl; }
main.cpp
#include "stack.hpp" int main() { stack<int> s; return 0; }
答案:
它在单独的 .cpp 文件中实现模板化类并编译它们是不可行的。实现必须包含在 .hpp 文件中,因为编译器在生成模板类的内存布局和方法定义时需要了解数据类型。尝试独立编译 .cpp 文件将导致以下问题:
替代方案解决方案:
要隐藏实现细节,请考虑分离数据结构和算法。创建模板化类来表示数据结构,而非模板化类则处理算法并利用数据结构。这使得可以在单独的库中隐藏基本的实现细节,而无需依赖模板类。
以上是模板化 C 类可以拆分为 .hpp 和 .cpp 文件吗?的详细内容。更多信息请关注PHP中文网其他相关文章!