gpt4 book ai didi

c++ - 如何为模板参数包指定默认参数?

转载 作者:行者123 更新时间:2023-12-05 02:28:58 25 4
gpt4 key购买 nike

我有以下方法

template <std::size_t N, std::size_t... Indices>
void doSomething()
{
...
};

似乎无法为 Indices 提供默认值,例如

template <std::size_t N, std::size_t... Indices = std::make_index_sequence<N>>
void doSomething()
{
...
};

编译器提示

error: expected primary-expression before '>' token
template <std::size_t N, std::size_t... Indices = std::make_index_sequence<N>>
^~
error: template parameter pack 'Indices' cannot have a default argument
template <std::size_t N, std::size_t... Indices = std::make_index_sequence<N>>
^~~

有什么办法解决这个问题吗?

最佳答案

到目前为止,已经有两个很好的答案(包括 NathanOliver 的评论)。我认为有一个 couple of overloads that act as wrappers这里确实是最简单的解决方案,但为了完整起见,让我们在一个函数中提供您想要的功能:

通常最好从参数列表中取出尽可能多的模板逻辑(将输入与逻辑分开):

template <std::size_t N, std::size_t... Indices>
void doSomething()
{
using Ints
= std::conditional_t<
/* if */ (sizeof...(Indices) > 0),
std::index_sequence<Indices...>,
/* else */
std::make_index_sequence<N>>;

// ...
};

demo

关于c++ - 如何为模板参数包指定默认参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72399510/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com