微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从可变参数中只取一个值

如何解决从可变参数中只取一个值

我想通过这个简单的例子来提问:我如何从可变参数包中获取最后一个值和 print(1,2,3.14)调用 print(3,14)

void print()
{
   cout<<"--empty--";
}

void print(x)
{
    std::cout<<"Last Value from variadic pac--" << x;
}
      
template <typename T,typename... Types>
void print(T var1,Types... var2)
{ 
   int x = // last value from variadic pac : 3.14
   print(x) // 3.14 
}
  
int main()
{
    print(1,3.14);
  
    return 0;
}

解决方法

使用std::tuple,您可能会

template <typename T,typename... Types>
void print(T var1,Types... var2)
{ 
   auto x = std::get<sizeof...(Types) - 1>(std::tie(var2...));
   print(x); // 3.14 
}

Demo

,

尽管您将问题标记为 c++14,但我认为值得注意的是,如果使用折叠表达式和 constexpr,c++17 解决方案要简单得多:

整体:

template <typename... Types>
void print(Types... args)
{ 
    if constexpr (sizeof...(Types) == 0)
        std::cout << "Empty";
    else
        std::cout << (args,...);
}

折叠扩展为使用逗号运算符,它计算每个参数并丢弃结果,直到达到最后一个。最后一项的计算结果成为整个表达式的值,并被打印出来。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。