首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在模板类实现中分离.h和.cpp文件

在模板类实现中分离.h和.cpp文件
EN

Stack Overflow用户
提问于 2013-03-23 02:32:48
回答 2查看 19.4K关注 0票数 8

我正在尝试编写一个模板类,它可以根据我传递的<class>来形成类。问题是我不能在同一个.h文件中声明和定义。在我的项目中,UTF工具只能处理.cpp文件(用于代码覆盖率等)。我在一篇博客中看到他们说“用.cpp代替.h”。这样做可取吗?

Template.h

代码语言:javascript
复制
#ifndef TEMPLATE_H_
#define TEMPLATE_H_

template<class T>
class Template
{
public:
    T Add(T a,T b);
};

#endif /* TEMPLATE_H_ */

Template.cpp

代码语言:javascript
复制
#include "Template.h"

template<class T>
T Template<T>::Add(T a, T b)
{
    return a+b;
}

Main.cpp

代码语言:javascript
复制
#include "Template.cpp" //Is this a good practise? 
#include <iostream>

int main(int argc, char **argv) {
    Template<int> obj;
    std::cout<<obj.Add(3,4)<<std::endl;
}

如果这是不可取的,那么我如何解决这个问题?export

EN

回答 2

Stack Overflow用户

发布于 2013-03-23 02:41:59

编译器需要有权访问方法的实现才能实例化模板类,因此最常见的做法是在声明模板的头文件中包含模板的定义,或者在头文件中定义它们。

请参阅Why can templates only be implemented in the header file?

票数 7
EN

Stack Overflow用户

发布于 2013-03-23 02:38:40

必须在使用模板的每个翻译单元中定义模板。这意味着它们必须在头文件中定义。如果您的工具坚持使用扩展.cpp,您也可以提供它,就像您所做的那样。

在这种情况下,您甚至不需要将伪头拆分为.h.cpp。你可以把它全部放在.cpp#include中。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15577478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档