是否可以编写可变参数函数模板,接受::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)
等等...
如果你只是想每行打印两个数字,为什么还要打扰它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)