构造函数 getting/setting 默认分配器在哪里?
Where is the constructor getting/setting the default allocator?
关于 boost::circular_buffer class,
我能够实例化一个简单的如下:
#include<boost/circular_buffer.hpp>
int main() {
boost::circular_buffer<double> buffer;
}
circular_buffer class 模板化为
template<typename T, typename Alloc>
class circular_buffer {
...
typedef Alloc allocator_type;
...
}
我相信被调用的构造函数是
explicit circular_buffer(const allocator_type & = allocator_type()) noexcept;
我不明白的是 buffer
在哪里获得它的默认分配器?该文档指出,如果未明确提供,默认 Alloc 对象是一个 std::allocator<T>
,但我看不到这是在哪里设置的。我不是想改变它,我只是想从 c++/软件工程的角度理解这个 class 的设计。
circular_buffer_fwd.hpp
header 负责设置默认分配器
template <class T, class Alloc = BOOST_CB_DEFAULT_ALLOCATOR(T)>
class circular_buffer;
class 接收分配器类型作为模板参数:
template<typename T, typename Alloc>
class circular_buffer {
构造函数参数只是 default-constructs 该类型的一个实例。
如果您使用 circular_buffer
而不指定 Alloc
模板参数,它将使用基本模板声明中指定的默认值:
template <class T, class Alloc = BOOST_CB_DEFAULT_ALLOCATOR(T)>
class circular_buffer;
这是隐藏在circular_buffer_fwd.hpp
header。宏的计算结果为 std::allocator<T>
或等效的(如果平台没有)。
关于 boost::circular_buffer class,
我能够实例化一个简单的如下:
#include<boost/circular_buffer.hpp>
int main() {
boost::circular_buffer<double> buffer;
}
circular_buffer class 模板化为
template<typename T, typename Alloc>
class circular_buffer {
...
typedef Alloc allocator_type;
...
}
我相信被调用的构造函数是
explicit circular_buffer(const allocator_type & = allocator_type()) noexcept;
我不明白的是 buffer
在哪里获得它的默认分配器?该文档指出,如果未明确提供,默认 Alloc 对象是一个 std::allocator<T>
,但我看不到这是在哪里设置的。我不是想改变它,我只是想从 c++/软件工程的角度理解这个 class 的设计。
circular_buffer_fwd.hpp
header 负责设置默认分配器
template <class T, class Alloc = BOOST_CB_DEFAULT_ALLOCATOR(T)>
class circular_buffer;
class 接收分配器类型作为模板参数:
template<typename T, typename Alloc>
class circular_buffer {
构造函数参数只是 default-constructs 该类型的一个实例。
如果您使用 circular_buffer
而不指定 Alloc
模板参数,它将使用基本模板声明中指定的默认值:
template <class T, class Alloc = BOOST_CB_DEFAULT_ALLOCATOR(T)>
class circular_buffer;
这是隐藏在circular_buffer_fwd.hpp
header。宏的计算结果为 std::allocator<T>
或等效的(如果平台没有)。