gpt4 book ai didi

c++ - 使用分配器 C++ 创建元组

转载 作者:行者123 更新时间:2023-12-03 12:47:23 24 4
gpt4 key购买 nike

我正在学习 C++ 中的元组,现在我正在尝试使用 libcxx 中的分配器创建元组

template <class _Alloc>
LIBCPP_INLINE_VISIBILITY
tuple(allocator_arg_t, const _Alloc& __a, const _Tp& ... __t)

例如:

std::allocator<int> myAllocator;
std::tuple<int> t(std::allocator_arg, myAllocator, 2);

但上面的字符串似乎叫做

template <class Alloc>
tuple(allocator_arg_t, const Alloc& a, const Types&...);

我应该为此改变什么?

此外,有一行我不清楚:

 explicit
tuple(_Up&&... __u)

这是如何调用的?

最佳答案

当您查看实现的源代码并看到

namespace std {

// Other things

template <typename ... _Tp>
class tuple {

// More things

template <class _Alloc>
LIBCPP_INLINE_VISIBILITY
tuple(allocator_arg_t, const _Alloc& __a, const _Tp& ... __t)
// an implementation of this constructor

};
}

cppreference 的构造函数名称

template <class Alloc>
tuple(allocator_arg_t, const Alloc& a, const Types&...);

您的实现已选择使用为其使用保留的名称。这些名称到底是什么对编译器来说并不重要。

what const _Tp& ... __t is?

它是要复制到元组中的元素参数包。对于 std::tuple<int> ,就是const int& ,对于std::tuple<std::string, bool, char>它是const std::string &, const bool &, const char &__t是参数包的名称。 C++ 允许模板具有不同数量的参数。

what about tuple(_Up&&... __u)?

这就是过载 (3)

Converting constructor. Initializes each element of the tuple with the corresponding value in std::forward<UTypes>(args).

This overload only participates in overload resolution if sizeof...(Types) == sizeof...(UTypes) and sizeof...(Types) >= 1 and std::is_constructible<Ti, Ui&&>::value is true for all i.

The constructor is explicit if and only if std::is_convertible<Ui&&, Ti>::value is false for at least one i.

例如对于 std::tuple<int> tup('a'); , tup将通过匹配 UTypes... 进行初始化与 char ,第一个成员的数值为 'a' (大多数平台上为 97)。

请注意,对于 std::tuple<int> 使用分配器感知的构造函数没有多大意义。 ,因为int不是分配器感知类型。这些构造函数存在于类似的情况

using statefully_allocated = std::vector<int, my_stateful_allocator<int>>;
my_stateful_allocator<int> alloc1 = /* something */
statefully_allocated source(alloc);
my_stateful_allocator<int> alloc2 = /* something else */
std::tuple<statefully_allocated, char> tup(std::allocator_arg, alloc2, source, 'a');

哪里statefully_allocated成员(member)复制 source 的内容,但使用 alloc2 的拷贝分配。 char成员(member)只是一个普通char , alloc2不参与其构建。请参阅Uses-allocator construction

关于c++ - 使用分配器 C++ 创建元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55256384/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com