c++ - 将模板类的声明和定义分开在不同的头文件中是否安全?
问题描述
我正在尝试为学校作业创建一个库,我一直想知道在包含类定义和方法声明的主头文件上声明一个模板类是否安全,然后将方法定义分开头文件?
因为我在下面的示例中已经能够做到这一点,但我不知道从长远来看它是否会给我带来一些问题。
主程序
// main.cpp
#include <iostream>
#include "declaration.hpp"
int main()
{
card<int> a(5);
std::cout<<a.getID()<<'\n';
return 0;
}
主头文件
在这个头文件中,只写了类定义和方法的声明,getID()
而不是它的定义,并且在类的末尾我包含了另一个包含方法定义的头文件。
// declaration.hpp
#ifndef DEC_HPP
#define DEC_HPP
#include <iostream>
template<typename T>
class card
{
public:
T id;
card(const int id) : id(id) {}
T getID();
};
#include "definition.hpp"
#endif
方法定义
此头文件包含getID()
来自主头的方法定义。
我还在"declaration.hpp"
此标题中包含了 ,这是我不太确定的部分,因为我将两个文件一起包含在了一起。
// definitions.hpp
#ifndef DEF_HPP
#define DEF_HPP
#include <iostream>
#include "declaration.hpp"
template<typename T>
T card<T>::getID()
{
return id;
}
#endif
我已经编译了这个程序并且它正在我的机器上运行,但我只是想知道这种隔离我的代码的方式是否会在将来导致我出现一些错误,我不想将我的模板类定义放在 cpp 文件中,因为我觉得很难维护。
解决方案
这确实是一种更好的方法,因为它使您的代码看起来更简单更好。而且,它是使用头文件的主要原因。您的主头文件将简单地告诉您正在使用哪些函数/类,甚至无需查看您的代码,任何人都可以猜测您是否正常工作。根本不会有任何安全问题。
推荐阅读
- getstream-io - 无法更新收件箱提要中的活动
- azure - az webapp list-runtimes - Powershell 等效项
- react-native - 按下按钮时打开覆盖组件
- windows - 普罗米修斯无法划分 2 个值
- python - 校准非对称拉普拉斯分布函数
- sql - 如何从 oracle 中的结果集中获取具有不同列值的记录?
- c# - 添加 JToken 时出现错误 Newtonsoft.Json.Linq.JProperty 不能有多个值
- hash - 如何确保散列函数不会为 2+ 个不同的条目生成相同的密码?
- wicket - 我怎样才能得到 wicket 1.4 中的 id 奇怪问题
- python - 在 .build() 和 .start() 之后无法获得 kivy 应用程序的屏幕