避免头文件中的模板定义

时间:2015-03-16 23:21:08

标签: c++ templates

我在标题A.h中定义了以下类:

class A {

private:

template<int i>
void method();

};

有没有办法让我将method的实现保留在自己的A.cpp文件中,并使用常用的方法实现? 我问这个是因为将实现放在A.h会使接口很难读,特别是因为它是一个私有函数。

如果重要的话,它只能用有限的“i”值进行实例化

1 个答案:

答案 0 :(得分:5)

您可以执行以下操作(因为它是广泛使用的练习):

<强> 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
}