在不同的 header 文件中分隔模板化的 class' 声明和定义是否安全?

Is it safe to separate your templated class' declaration and definitions on different header files?

我正在尝试为一项学校作业创建一个图书馆,我一直在想声明它是否 安全一个 模板 classmain header 文件包含 class 定义 和方法 声明 ,但随后将 方法定义[= =58=] 在 不同的 header 文件中?

因为我在下面的例子中已经做到了,但是我不知道在很长一段时间内会不会给我带来一些问题运行。


主程序

// main.cpp
#include <iostream>
#include "declaration.hpp"

int main()
{
    card<int> a(5);
    std::cout<<a.getID()<<'\n';
    return 0;
}

主要header文件

在这个header文件中,只写了class定义和方法getID()的声明,没有写它的定义,到class 我包含了另一个包含方法定义的 header 文件。

// 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

方法定义

此 header 文件包含 header.

主文件中 getID() 的方法定义

我还在这个 header 中包含了 "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

我已经编译了这个程序并且它在我的机器上运行,但我只是想知道这种隔离我的代码的方式是否会导致我将来出现一些错误,我不想把我的模板 class 定义在 cpp 文件中,因为我发现它很难维护。

这确实是一种更好的方法,因为它使您的代码看起来更简单、更好。而且,这也是使用头文件的主要原因。 您的主头文件将简单地告诉您 functions/classes 正在使用什么,甚至无需查看您的代码,任何人都可以猜测您是否工作正常。 完全不会有任何安全问题。