可变参数函数模板中的:: std :: pair

use*_*108 -2 c++ c++11

是否可以编写可变参数函数模板,接受::std::pairs,而无需手动构造对:

void print_pairs()
{
}

template <typename ...B>
void print_pairs(::std::pair<int, int> const& a, B&&... b)
{
  ::std::cout << a.first << " " << a.second << ::std::endl;

  print_pairs(::std::forward<B>(b)...);
}
Run Code Online (Sandbox Code Playgroud)

但我希望能够写作print_pairs({1, 1}, {2, 2});,而不是一直::std::make_pair都在使用.

编辑:

经过一番思考,最好的解决方案可能是旧学校:

print_pairs(::std::pair<int, int> const&);
print_pairs(::std::pair<int, int> const&, ::std::pair<int, int> const&);
print_pairs(::std::pair<int, int> const&, ::std::pair<int, int> const&, ::std::pair<int, int> const&);
Run Code Online (Sandbox Code Playgroud)

等等...

fre*_*low 8

如果你只是想每行打印两个数字,为​​什么还要打扰它std::pair

void print_pairs()
{
}

template <typename T, typename U, typename... Rest>
void print_pairs(const T& a, const U& b, const Rest&... rest)
{
    std::cout << a << " " << b << '\n';
    print_pairs(rest...);
}

int main()
{
    print_pairs(1, 1,  2, 2);
}
Run Code Online (Sandbox Code Playgroud)

如果你真的需要这些对,只需在函数模板中创建它们:

template <typename T, typename U, typename... Rest>
void print_pairs(T&& a, U&& b, Rest&&... rest)
{
    auto p = std::make_pair(std::forward<T>(a), std::forward<U>(b));
    // ...
    print_pairs(std::forward<Rest>(rest)...);
}
Run Code Online (Sandbox Code Playgroud)