使用其他参数引用 const 默认参数?
ref to a const default parameter using other parameter?
我正在创建自定义 forward_list,但在制作 this copy constructor. 时遇到了问题
问题是,在我的 forward_list 中,我有一个私有变量 A& heap;
,我想用 alloc 实例化它,除非没有提供 alloc(我不明白这是怎么回事,因为alloc 是参考参数,因此必须提供 ?)。
因此,如果没有以某种方式提供,我唯一可以实例化 alloc 的地方是在 init 列表中(因为它是一个引用),但我不能,因为 allocator_traits 需要 other.get_allocator(),这是另一个参数.
template<typename T, typename A = std::allocator<T>>
class forward_list
{
...
private:
struct node
{
T data;
std::unique_ptr<T> next;
};
std::unique_ptr<node> root_;
std::unique_ptr<node> leaf_;
size_t count_;
const A& heap;
}
/* Copy constructor. Constructs the container with the copy of the contents of other.
* If alloc is not provided, allocator is obtained by calling
* std::allocator_traits<allocator_type>::select_on_container_copy_construction(other.get_allocator());
*/
forward_list(const forward_list& other, const A& alloc = A())
: heap(std::allocator_traits<allocator_type>::select_on_container_copy_construction(other.get_allocator()))
{
}
inline forward_list(const forward_list& other)
: root_(other.root_), leaf_(other.leaf_), count_(other.count_), heap(std::allocator_traits<allocator_type>::select_on_container_copy_construction(other.get_allocator())) {};
inline forward_list(const forward_list& other, const A& alloc)
: root_(other.root_), leaf_(other.leaf_), count_(other.count_), heap(alloc) {};
我正在创建自定义 forward_list,但在制作 this copy constructor. 时遇到了问题
问题是,在我的 forward_list 中,我有一个私有变量 A& heap;
,我想用 alloc 实例化它,除非没有提供 alloc(我不明白这是怎么回事,因为alloc 是参考参数,因此必须提供 ?)。
因此,如果没有以某种方式提供,我唯一可以实例化 alloc 的地方是在 init 列表中(因为它是一个引用),但我不能,因为 allocator_traits 需要 other.get_allocator(),这是另一个参数.
template<typename T, typename A = std::allocator<T>>
class forward_list
{
...
private:
struct node
{
T data;
std::unique_ptr<T> next;
};
std::unique_ptr<node> root_;
std::unique_ptr<node> leaf_;
size_t count_;
const A& heap;
}
/* Copy constructor. Constructs the container with the copy of the contents of other.
* If alloc is not provided, allocator is obtained by calling
* std::allocator_traits<allocator_type>::select_on_container_copy_construction(other.get_allocator());
*/
forward_list(const forward_list& other, const A& alloc = A())
: heap(std::allocator_traits<allocator_type>::select_on_container_copy_construction(other.get_allocator()))
{
}
inline forward_list(const forward_list& other)
: root_(other.root_), leaf_(other.leaf_), count_(other.count_), heap(std::allocator_traits<allocator_type>::select_on_container_copy_construction(other.get_allocator())) {};
inline forward_list(const forward_list& other, const A& alloc)
: root_(other.root_), leaf_(other.leaf_), count_(other.count_), heap(alloc) {};