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

标签 c++ templates constexpr non-type

我正在将一个库包装到我的类(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/

相关文章:

C++ 枚举不命名类型

c++ - 全局函数头和实现

c++ - 如何通过引用传递参数给模板类的成员函数?

c++ - 了解 _countof 宏

c++ - 变量模板的显式特化

c++ - 如何在编译时更改类继承的内容?

c++ - Constexpr 这是正确的行为吗?

c++ - 可能的模板和 constexpr——如果不兼容

c++ - 局部constexpr变量引入了编译器错误

使用 g++ 找不到 C++ 头文件 'wchar.h' (MacOS)