::std::对在可变函数模板中
::std::pair in a variadic function template
是否可以编写一个可变函数模板,接受::std::pair
s,而不必手动构建对:
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)...);
}
但我希望能够编写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&);
等等…
如果您只想每行打印两个数字,为什么还要构建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);
}
如果你真的需要这些对,只需在函数模板中创建它们:
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)...);
}
感谢jrok
,这里有另一个解决方案:
template <int a, int b>
struct cpair
{
static constexpr auto const first = a;
static constexpr auto const second = b;
};
template <typename ...A>
void print_pairs()
{
::std::initializer_list<int>{(::std::cout << A::first << " " << A::second, 0)...};
}
这应该在没有太多开销的情况下工作。
相关文章:
- std::span<const T> 作为函数模板中的参数
- 在 C++20 中是否不再允许在 std 中对程序定义类型的函数模板进行专用化?
- C++ std::functional 中的可变参数函数模板
- 概念解析为使用 std::make_signed_t 时意外的函数模板
- 请参阅在 Visual Studio 2019 中捕获 std::exception 时对函数模板实例化消息的引用
- 非模板 std::reference_wrapper赋值运算符和模板构造函数
- 可变参数函数模板不能很好地使用 std::function 作为参数
- 可变参数模板函数:调用没有匹配函数,std::endl
- 将 std::type_index 作为模板参数传递给函数模板
- 构造函数模板参数推导,其中 std::function 作为参数
- 类模板的参数太少 "std::pair":在函数中将 std 对作为参数传递
- 为什么 std::函数模板构造函数不使用通用引用?
- 为什么重载分辨率不选择模板函数的 std::vector 重载?
- 错误 C2893 无法专门化函数模板'unknown-type std::invoke(_Callable &&,_Types &&...)'
- 无法专用化函数模板'unknown-type std::invoke(_Callable &&,_Types &&...) noexcept(<expr>)'
- c 类构造函数模板,带有std :: enable_if和std :: decay
- 函数模板参数推断使用 std::Optional 失败
- 模板函数中 std::string 的类型推断失败
- 从 std 命名空间中专门化函数模板的想法有多糟糕?
- 有人能解释一下特殊的std::函数模板参数列表语法(这个奇怪的类型(Types..))吗