首页 > 解决方案 > 将模板类的声明和定义分开在不同的头文件中是否安全?

问题描述

我正在尝试为学校作业创建一个库,我一直想知道在包含类定义和方法声明的主头文件上声明一个模板类是否安全,然后将方法定义分开头文件?

因为我在下面的示例中已经能够做到这一点,但我不知道从长远来看它是否会给我带来一些问题。


主程序

// 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 文件中,因为我觉得很难维护。

标签: c++templatesincludeheader-files

解决方案


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


推荐阅读