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

以下类可以利用template argument deduction for class templates吗?

template <int I>
struct Number
{
    /* appropriate constructor here */
}; 

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

Number a(3); // a's type is Number<3>
最佳答案
类模板的模板参数推导可以推导出非类型模板参数,但不是您尝试执行它的方式.

例如

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>
}

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

转载注明原文:c – 类模板的模板参数推导可以用于非类型模板参数吗? - 代码日志