避免在 header 文件中定义模板

avoiding template definition in header file

我在 header A.h 中定义了以下 class :

class A {

private:

template<int i>
void method();

};

有什么方法可以让我在自己的 A.cpp 文件中保留 method 的实现,使用通常的方法实现吗? 我问这个是因为将实现放在 A.h 中会使界面很难阅读,尤其是因为它是一个私有函数。

如果重要的话,它只会用 "i" 的有限值实例化

您可以执行以下操作(因为这是广泛使用的做法):

A.hpp


class A {

private:

template<int i>
void method();

};

#include "A.tcc"

A.tcc


template<int i>
void A::method() {
    // do something with i
}

请注意,使用与 .cpp 不同的扩展名来命名实现文件很重要,因为这会混淆大多数标准构建系统环境(除非您完全手动选择翻译单元文件)。


如果您想对 i 的某些值进行专门的实现,您可以按如下方式提供它们:

// Specialization for 1
template<>
void A::method<1>() {
    // do something for specialization with 1
}

template<>
void A::method<2>() {
    // do something for specialization with 2
}