2015-03-12 11 views
5

,Kurucu varsayılan ayırıcıyı nereden alıyor/ayarlıyor? <a href="http://www.boost.org/doc/libs/1_57_0/doc/html/boost/circular_buffer.html">boost::circular_buffer</a> sınıfa gelince

ben şöyle basit bir örneğini açabiliyorum

:

#include<boost/circular_buffer.hpp> 
int main() { 
    boost::circular_buffer<double> buffer; 
} 

circular_buffer sınıf

template<typename T, typename Alloc> 
class circular_buffer { 
    ... 
    typedef Alloc allocator_type; 
    ... 
} 

ile templatized ve ben yapıcı inanıyoruz aranan varlık

explicit circular_buffer(const allocator_type & = allocator_type()) noexcept; 

Neyi anlamadığım buffer varsayılan ayırıcıyı alıyor? Belgeler, açıkça belirtilmemişse, Varsayılan Alloc nesnesinin std::allocator<T> olduğunu, ancak bunun nerede ayarlandığını görmediğini belirtir. Bunu değiştirmeye çalışmıyorum, sadece bu sınıfın tasarımını bir C++/yazılım mühendisliği bakış açısıyla anlamaya çalışıyorum.

cevap

3

sınıf bir şablon bağımsız değişken olarak ayırıcı tipini aldığı varsayılan allocator ayarı ilgilenir:

template<typename T, typename Alloc> 
class circular_buffer { 

ve sadece yapıcı argüman bir örneğini varsayılan-yapıları bu tip. Bu circular_buffer_fwd.hpp başlığında saklandığını

template <class T, class Alloc = BOOST_CB_DEFAULT_ALLOCATOR(T)> 
class circular_buffer; 

: Eğer Alloc şablon belirtmeden, circular_buffer kullanırsanız

o baz şablon bildiriminde belirtilen varsayılan kullanır. Makro, platformda yoksa, std::allocator<T> veya eşdeğer olarak değerlendirir.

+0

Teşekkürler, bir "circular_buffer_fwd.hpp" üstbilgisinin dahil edildiğinin farkında değildim. Dokümanlar bundan bahsetmiyor, ancak doğrudan bilgisayarımın başlığına baktıktan sonra görüyorum. – idWinter

3

circular_buffer_fwd.hpp başlık

template <class T, class Alloc = BOOST_CB_DEFAULT_ALLOCATOR(T)> 
class circular_buffer; 
İlgili konular