模板数组长度作为参数
Template array length as argument
我正在尝试了解有关C++模板的更多信息。我希望能够调用一个函数,在其中我传递一个类型和长度作为参数。这可能吗?
template <class T>
void alloc_arr (int l) {
std::allocator<T[l]> a;
}
alloc_arr<int[]>(64);
它不起作用,因为实例化类型必须在编译时修复(T[l]
不固定)。
有没有其他方法可以做到这一点,不需要在类型(<T[64]>
)中指定长度?
有没有其他方法可以做到这一点,不需要在类型()中指定长度?
在某种程度上,您需要将其作为模板参数传递
你可以按照Lourens Dijkstra的建议明确地传递它
template <typename T, std::size_t Dim>
void alloc_arr ()
{
std::allocator<T[Dim]> a;
// ...
}
或者,如果你至少可以使用C++11,你也可以从参数的类型中推断出它;通过示例,
template <typename T, std::size_t Dim>
void alloc_arr (std::integral_constant<std::size_t, Dim> const &)
{
std::allocator<T[Dim]> a;
// ...
}
或者也
template <typename T, typename U>
void alloc_arr (U const &)
{
std::allocator<T[U::value]> a;
// ...
}
举例来说,用std::integral_constant<std::size_t, 5u>{}
调用alloc_arr
。
您可以将大小作为template parameter
传递:
template <class T, size_t size>
void alloc_arr() { ... }
这是唯一的办法。几天前,我发现将constexpr lambda
作为常规参数传递被认为是格式错误的: 尝试传递 constexpr lambda 并使用它来显式指定返回类型
另外,请注意类型 T 应该是 int
的,而不是int[]
的。
因此,调用alloc_arr:
alloc_arr<int, 64>();
相关文章:
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- C++中的高效循环缓冲区,它将被传递给C样式数组函数参数
- 如何使用Visual Studio 2017在C++中为参数化对象数组使用唯一指针
- 为 NewObjectA() 函数创建 jvalues 的参数数组时出错 - JNI Invocation API
- 估计函数参数数组的维度
- 温度参数数组的内存泄漏
- 如何将值附加到命令行参数数组?
- libpqxx:如何绑定参数数组
- 如何在德尔福中C++参数数组指针算术
- C++函数参数或参数数组
- 将 std::function 代理为需要参数数组的 C 函数
- 分析字符串参数数组
- Pro*C传递参数数组
- OpenCV错误:cvGetSize中的错误参数(数组应该是CvMat或IplImage)
- c++无限参数数组
- 查找命令行参数数组中的元素数
- 如何将目录中所有具有完整路径的文件传递到execv中的参数数组
- ODBC:参数数组-忽略参数
- 使用lambda参数数组