【发布时间】:2020-11-25 21:11:13
【问题描述】:
我想声明一个函数,它将一个变量(比如说,int)作为参数,该变量应该由一个类参数化。说到 lambda 演算,我希望我的参数有一种 * -> int。
我希望能够编写的函数示例(Spec 是变量):
template <??? Specification, typename T>
auto make_array() {
return std::array<T, Specification<T>>;
}
由于 C++14 我们有可变模板,所以我们可以这样做:
template <typename T>
constexpr int digits = std::numeric_limits<T>::digits;
问题是,我如何将它传递给函数?在cppreference 的注释部分指出
变量模板不能用作模板模板参数。
但这是否意味着实际上没有办法将参数化变量作为函数参数传递?例如,您可以创建一个具有表示值的静态字段的类,但一个明显的缺点是我的函数的用户必须从该类派生。
我相信使用 SFINAE 可能会有一些解决方法,但我缺乏这方面的技能。
【问题讨论】:
-
措辞有点混乱,因为你在谈论一个函数参数,但代码看起来你想要一个模板参数,而且引用是关于模板参数的
-
@idclev463035818 我很好奇实现这样一个功能的任何方式,但我猜它可以被认为是一个模板参数。
-
@Sprite 除了提供的答案,它确实回答了我的问题。
-
您的示例使用
int,因为您想将“specification<T>的值”作为模板参数传递给std::array,对吗?注意std::array的参数是size_t不是int(我第一次在我的回答中犯了同样的错误)
标签: c++ templates c++14 sfinae