我想获取参数包的最后一个元素。我用下面的代码GodBolt 做到了:
template<typename... Args>
auto last(Args&&... args){
const auto& last = (args, ...);
return last;
}
Run Code Online (Sandbox Code Playgroud)
但现在我收到警告
逗号运算符的左操作数无效
但这正是我想要实现的......有没有办法说清楚。一般来说,我喜欢收到未使用值的警告,所以我不想禁用所有这些(-Wno-unused-value)。
此外,我可以使用递归模板来实现,但这里的折叠表达式似乎更好。
包装args在任何函数调用中都会消除警告。
您可以专门为此目的制作身份功能,但您也可以使用std::forward并获得适当的转发作为奖励。
template<typename... Args>
decltype(auto) last(Args&&... args){
return (std::forward<Args>(args), ...);
}
Run Code Online (Sandbox Code Playgroud)
创建一个元组并获取最后一个元素:
template<typename... Args>
auto last(Args&&... args)
{
return std::get<sizeof...(Args)-1>(std::forward_as_tuple(args...));
}
Run Code Online (Sandbox Code Playgroud)
测试:
int main()
{
auto&& last_element = last(1, 1.0, true);
static_assert(std::is_same_v<bool, std::remove_cvref_t<decltype(last_element)>>);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
341 次 |
| 最近记录: |