首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用模板方法为类定义非模板方法

使用模板方法为类定义非模板方法
EN

Stack Overflow用户
提问于 2021-01-13 11:09:12
回答 1查看 33关注 0票数 0

我想要做的是:

代码语言:javascript
复制
// in foo.hpp

class foo {
    private:
        int m_a;
        long m_b;

    public:
        foo(); // default constructor (defined in foo.cpp)
        template<class T>
            int Func1(int a, int b) {
                // Func1 definition
                // uses member variables m_a, m_b
            }
}

// in foo.cpp

#include "foo.hpp"

foo::foo() {
    // Foo constructor
    // Uses member variables m_a, m_b
}

我知道C++中的模板是作为一种模式工作的,是按需实例化的。因此,为了让编译器理解发生了什么,模板方法定义需要在头文件中(否则我需要使用其他变通方法,如使用实现文件(.tpp)并将其包含在foo.hpp中)这也适用于具有非模板方法的模板类。需要在头文件中定义非模板方法。我的问题是Foo是一个常规的类,它有一个模板方法和一个常规的构造函数。构造函数应该在头文件中定义,还是可以在单独的源文件中定义?

我在工作中遇到了这个问题。将构造函数定义移到头文件似乎可以解决这个问题。如果有人能为这种行为提供解释,那将是很有帮助的。

EN

回答 1

Stack Overflow用户

发布于 2021-01-13 11:18:05

构造函数应该在头文件中定义,还是可以在单独的源文件中定义?

只要构造函数和类本身不是模板,您就可以随心所欲地定义它。

有一点我想澄清一下:Atemplate的定义只需要在实例化时是可见的。这实际上并不意味着template必须总是在头文件中定义;如果它的唯一用途是在源文件中内部化(例如,它是一个private函数,仅在内部使用),那么它也可以很容易地在源文件中定义。

通常,这确实意味着当它是public函数模板或类模板时,它应该在header中--但也有例外情况。

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

https://stackoverflow.com/questions/65695128

复制
相关文章

相似问题

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