在 tpp 文件中声明模板成员函数

Declaring a template member function in a tpp file

我有一个 class A,其中包含一个模板成员函数 AFunc。为了将定义与声明分开,我在 A.h 中一起声明了 AAFunc。然后我在 A.tpp 中定义成员函数 AFunc 并在文件 A.h.

底部定义 #include "A.tpp"

对我来说,这一切看起来都像是有效的 C++。但是,Visual Studio 编译器会抛出错误:

A.tpp(8,139): error C2244: 'A::AFunc': unable to match function definition to an existing declaration

明确的解决方案是在定义 AFunc 之前在 A.tpp 文件的顶部包含一个 AFunc 的声明。这个声明在A.h中,所以我们想在A.tpp中包含A.h,我们想在A.h中包含A.tpp。这种包含是周期性的。

// A.h

class A{
    template <class T>
    void AFunc();
};
#include "A.tpp"
// A.tpp

template <class T>
void A::AFunc(){
    // definition
}

处​​理这个问题的典型解决方案是什么?

您是向编译器提供文件“A.tpp”还是另一个包含“A.h”的 C++ 源文件?按照您的结构方式,我认为后者会给您带来您期望的行为。抱歉,我没有太多的 VS 经验。