类模板的模板参数推导可以用于非类型模板参数吗?

Lor*_*ins 3 c++ templates c++17

像下面这样的类可以利用类模板模板参数推导吗?

template <int I>
struct Number
{
    /* appropriate constructor here */
}; 
Run Code Online (Sandbox Code Playgroud)

通过"利用"我的意思是,有没有办法(隐式或明确地)I推导出的价值?使用示例如下:

Number a(3); // a's type is Number<3>
Run Code Online (Sandbox Code Playgroud)

Bri*_*ian 5

类模板的模板参数推导可以推导出非类型模板参数,但不是您尝试执行它的方式.

例如

template <std::size_t size>
struct ArrayWrapper {
    ArrayWrapper(std::array<int, size> a);
};
int main() {
    std:array<int, 5> a;
    ArrayWrapper aw(a);  // ok; declares ArrayWrapper<5>
}
Run Code Online (Sandbox Code Playgroud)

但在您的示例中,您尝试从参数的推导出非类型模板参数.通常,C++的模板推导系统不支持该类,无论是用于类模板还是用于任何其他上下文.