【问题标题】:Two variadic templates for a single function?单个函数的两个可变参数模板?
【发布时间】:2013-02-09 05:06:36
【问题描述】:

在 C++11 中,一个函数可以有两个可变参数模板吗?

如果没有,有没有办法写出这样的东西:

template <class... Types, class... Args> 
void f(const std::tuple<Types...>& t, Args&&... args)

【问题讨论】:

  • 你的意思是template&lt;typename... A1, typename... A2&gt; void f(A1&amp;&amp;... a1, A2&amp;&amp;... a2)
  • 我想知道我是不是误解了这个问题
  • @Yakk : 我认为你写的那个是不合法的(编译器没有意思在 A1 和 A2 之间的某个地方“剪切”)。
  • @Yakk 这是合法的。调用f(1, 2) 推断A1 为空,A2 推断为{int, int}
  • @Vincent 第一个模板参数包包含所有参数。所以结果是A1{double, double}A2 是空的。

标签: c++ templates c++11 variadic-templates variadic-functions


【解决方案1】:

这是完全合法的:

#include <tuple>

using namespace std;

template <class... Types, class... Args>
void f(const std::tuple<Types...>& t, Args&&... args)
{
    // Whatever...
}

int main()
{
    std::tuple<int, double, bool> t(42, 3.14, false);
    f(t, "hello", true, 42, 1.0);

    return 0;
}

【讨论】:

  • 谢谢!我不知道这是合法的,我认为它需要一种元编程技巧。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-16
  • 1970-01-01
  • 1970-01-01
  • 2021-07-26
  • 2019-11-22
  • 1970-01-01
  • 2021-02-11
相关资源
最近更新 更多