我正在将一个库包装到我的类(class)设计中。我想在类构造函数的库中调用带有 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 文件。根据this thread ,如果我想将模板实现放在 .cpp 源文件中,我必须在 .cpp 文件末尾显式实例化所有可能的模板参数。对于像无符号整数这样的非类型参数,这是否意味着我必须实例化数千个可能的无符号整数以使模板可用于所有无符号数字对象?感谢您的帮助。
最佳答案
我不建议将模板类的实现分离到源文件中。如果我正确理解您的情况,那么我认为除非您实例化模板参数的所有可能值,否则我认为不可能这样做,这对于 unsigned
是不可能的。
关于c++ - 源文件中的非类型模板参数显式实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40010130/