从 variadic 中只取一个值

Take only one value from variadic

我想通过这个简单的例子来提问:我如何从可变参数包中获取最后一个值并 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, 2, 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, ...);
}

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