首页 > 后端开发 > C++ > 模板化 C 类可以拆分为 .hpp 和 .cpp 文件吗?

模板化 C 类可以拆分为 .hpp 和 .cpp 文件吗?

Patricia Arquette
发布: 2024-12-22 05:49:08
原创
925 人浏览过

Can Templated C   Classes Be Split into .hpp and .cpp Files?

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板