堆栈容器适配器构造
stack container adaptor construction
来自 cppreference.
- 如何初始化 5-9 个构造函数?
- 成员模板构造函数的用途是什么
template< class Alloc >
?
对于第一个问题,我尝试了各种方法,但我就是做不对。例如
std::stack<int> first;
first.push(1);
first.push(2);
std::stack<int> second {first, std::allocator<int>()}; // error
对于第二个问题,我不明白成员模板构造函数的目的是什么template< class Alloc>
。例如 vector 有一个构造函数 vector( const vector& other, const Allocator& alloc );
,它清楚地表明第二个参数是一个分配器,它可以像下面这样简单地初始化
std::vector<int> first {1, 2, 3};
std::vector<int> second {first, std::allocator<int>()};
喜欢T.C。怀疑,看起来 libstdc++ 还没有实现那些构造函数。这是来自他们的 doxygen 的 source:
128 #if __cplusplus < 201103L
129 explicit
130 stack(const _Sequence& __c = _Sequence())
131 : c(__c) { }
132 #else
133 explicit
134 stack(const _Sequence& __c)
135 : c(__c) { }
136
137 explicit
138 stack(_Sequence&& __c = _Sequence())
139 : c(std::move(__c)) { }
140 #endif
另一方面,这是我的 Clang 的片段:
template <class _Alloc>
_LIBCPP_INLINE_VISIBILITY
stack(const container_type& __c, const _Alloc& __a,
typename enable_if<uses_allocator<container_type,
_Alloc>::value>::type* = 0)
: c(__c, __a) {}
template <class _Alloc>
_LIBCPP_INLINE_VISIBILITY
stack(const stack& __s, const _Alloc& __a,
typename enable_if<uses_allocator<container_type,
_Alloc>::value>::type* = 0)
来自 cppreference.
- 如何初始化 5-9 个构造函数?
- 成员模板构造函数的用途是什么
template< class Alloc >
?
对于第一个问题,我尝试了各种方法,但我就是做不对。例如
std::stack<int> first;
first.push(1);
first.push(2);
std::stack<int> second {first, std::allocator<int>()}; // error
对于第二个问题,我不明白成员模板构造函数的目的是什么template< class Alloc>
。例如 vector 有一个构造函数 vector( const vector& other, const Allocator& alloc );
,它清楚地表明第二个参数是一个分配器,它可以像下面这样简单地初始化
std::vector<int> first {1, 2, 3};
std::vector<int> second {first, std::allocator<int>()};
喜欢T.C。怀疑,看起来 libstdc++ 还没有实现那些构造函数。这是来自他们的 doxygen 的 source:
128 #if __cplusplus < 201103L
129 explicit
130 stack(const _Sequence& __c = _Sequence())
131 : c(__c) { }
132 #else
133 explicit
134 stack(const _Sequence& __c)
135 : c(__c) { }
136
137 explicit
138 stack(_Sequence&& __c = _Sequence())
139 : c(std::move(__c)) { }
140 #endif
另一方面,这是我的 Clang 的片段:
template <class _Alloc>
_LIBCPP_INLINE_VISIBILITY
stack(const container_type& __c, const _Alloc& __a,
typename enable_if<uses_allocator<container_type,
_Alloc>::value>::type* = 0)
: c(__c, __a) {}
template <class _Alloc>
_LIBCPP_INLINE_VISIBILITY
stack(const stack& __s, const _Alloc& __a,
typename enable_if<uses_allocator<container_type,
_Alloc>::value>::type* = 0)