c++ - 模板非类型参数推导

标签 c++ templates c++17 constexpr template-argument-deduction

是否可以为 c++17 函数推导模板值(而非类型)?

函数foo:

template<int I>
int foo()
{
    return (I);
}

可以通过以下方式调用:

foo<5>();

并将返回 5。

模板类型可以通过函数参数的类型推导出来。是否有可能以某种方式对模板值做同样的事情?例如:

template<int I = x>
int bar(const int x)
{
    return (I);
}

这显然行不通(因为对于一个 x 来说,在它的声明之前是必需的),但是可能有一些 C++17 技巧允许这样做吗?

我想用它来设置常量表达式函数参数。

最佳答案

你想要的只能通过(ab)使用整数推导的类型推导来完成。观察:

template<int x>
struct integer_value {};

template<int x>
void test(integer_value<x> val)
{
  //x can be used here.
}

当然,您必须使用 test(integer_value<4>{}) 调用它或类似的东西。

关于c++ - 模板非类型参数推导,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50479415/

相关文章:

c++ - 带有命名空间的模板化结构的 Typedef

c++ - 如何根据模板参数包是否与函数参数匹配来控制模板函数定义?

c++ - 创建 const std::vector 作为两个 const std::vector 的串联

c++ - 为什么指针到成员函数的模板参数推导失败?

c++ - Constexpr 如果使用非模板类型

c++ - 在 C++ 中创建 "template"对象的机制

c++ - 初始化未命名的结构指针/数组

c++ - 模板 C++ 一次重载多个运算符

c++ - c++17中的非类型模板参数可以是decltype(auto)吗?

c++ - std::unordered_map::merge() 的安全性