我想要做的是:
// 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是一个常规的类,它有一个模板方法和一个常规的构造函数。构造函数应该在头文件中定义,还是可以在单独的源文件中定义?
我在工作中遇到了这个问题。将构造函数定义移到头文件似乎可以解决这个问题。如果有人能为这种行为提供解释,那将是很有帮助的。
发布于 2021-01-13 11:18:05
构造函数应该在头文件中定义,还是可以在单独的源文件中定义?
只要构造函数和类本身不是模板,您就可以随心所欲地定义它。
有一点我想澄清一下:Atemplate的定义只需要在实例化时是可见的。这实际上并不意味着template必须总是在头文件中定义;如果它的唯一用途是在源文件中内部化(例如,它是一个private函数,仅在内部使用),那么它也可以很容易地在源文件中定义。
通常,这确实意味着当它是public函数模板或类模板时,它应该在header中--但也有例外情况。
https://stackoverflow.com/questions/65695128
复制相似问题