源文件中的非类型模板参数显式实例化

时间:2016-10-12 23:51:12

标签: c++ templates constexpr non-type

我正在将一个库包装到我的班级设计中。我想在我的类构造函数中使用库中提供的unsigned int非类型参数调用模板方法。

#include <iostream>
#include <bar.h>  // template header in here
class foo {
    foo(unsigned num) {
        BAR<num>();  // a template method BAR inside "bar.h"
    }
};

当我试图玩这个时,似乎非类型参数是constexpr。因此,上面的代码将生成错误,指示函数调用中存在const错误。

所以我决定让foo类成为一个类模板,并在foo的模板参数参数中传递这个无符号的非类型参数。

#include <iostream>
#include <bar.h>  // template header in here
template <unsigned num>
class foo {
    foo() {
        BAR<num>();  // a template method BAR inside "bar.h"
    }
};

这似乎运作良好。但是,我想将标头和源文件分成单独的.hpp / .cpp文件。根据{{​​3}},如果我想将模板实现放在.cpp源文件中,我必须在.cpp文件的末尾显式实例化所有可能的模板参数。对于像无符号整数这样的非类型参数,这是否意味着我必须实例化数千个可能的无符号int数,以使模板可用于所有无符号数字对象?谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

我不建议将模板类的实现分离为源文件。如果我理解你的情况,那么除非你实例化模板参数的所有可能值,否则我认为不可能这样做,unsigned是不可能的。