我能够实例化一个简单的如下:
#include<boost/circular_buffer.hpp>
int main() {
boost::circular_buffer<double> buffer;
}
Run Code Online (Sandbox Code Playgroud)
circular_buffer类被模板化了
template<typename T, typename Alloc>
class circular_buffer {
...
typedef Alloc allocator_type;
...
}
Run Code Online (Sandbox Code Playgroud)
我相信被调用的构造函数是
explicit circular_buffer(const allocator_type & = allocator_type()) noexcept;
Run Code Online (Sandbox Code Playgroud)
我不明白的是buffer它的默认分配器在哪里?文档说明,如果未明确提供,则默认Alloc对象是一个std::allocator<T>,但我看不到它的设置位置.我不是想改变它,我只是试图从c ++ /软件工程的角度来理解这个类的设计.
该类接收分配器类型作为模板参数:
template<typename T, typename Alloc>
class circular_buffer {
Run Code Online (Sandbox Code Playgroud)
并且构造函数参数只是默认构造该类型的实例。
circular_buffer如果您在不指定模板参数的情况下使用Alloc,它将使用基本模板声明中指定的默认值:
template <class T, class Alloc = BOOST_CB_DEFAULT_ALLOCATOR(T)>
class circular_buffer;
Run Code Online (Sandbox Code Playgroud)
这隐藏在circular_buffer_fwd.hpp标题中。std::allocator<T>如果平台没有该宏,则该宏的计算结果为或等效。
| 归档时间: |
|
| 查看次数: |
51 次 |
| 最近记录: |