我正在将一个库包装到我的班级设计中。我想在我的类构造函数中使用库中提供的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数,以使模板可用于所有无符号数字对象?谢谢你的帮助。
答案 0 :(得分:0)
我不建议将模板类的实现分离为源文件。如果我理解你的情况,那么除非你实例化模板参数的所有可能值,否则我认为不可能这样做,unsigned
是不可能的。