2012-11-02 21 views
6

Projemi C++ 11'e taşıyorum ve olabildiğince standart kitaplığı kullanmaya çalışıyorum.Şablon işlevi için 'typedef' (boost :: make_shared)

Taşıma işlemini sonlandırmadan önce, shared_ptr desteğiyle STL uygulaması arasında geçiş yapmanın hızlı bir yoluna ihtiyacım var (karşılaştırma ölçütleri, birim testleri vb.).

Yani böyle shared_ptr için bir takma ad tanımlanmaktadır:

#ifdef _USE_BOOST_ 
template <class C> 
using shared_ptr = boost::shared_ptr<C> 
#else 
template <class C> 
using shared_ptr = std::shared_ptr<C> 
#endif 

şimdi make_shared için aynı şeyi gerekiyor ... Ama nasıl? Makro? Bir sarıcı mı? Onlardan hiç hoşlanmıyorum. Alternatifler nelerdir? variadic şablonlar ve mükemmel yönlendirme kullanma

+1

Fazla seçenek yok. – Puppy

cevap

7

: Hızlı bir sarmalayıcı yazmak için ama

template<typename C, typename...Args> 
shared_ptr<C> make_shared(Args &&...args) { 
#ifdef _USE_BOOST_ 
    return boost::make_shared<C>(std::forward<Args>(args)...); 
#else 
    return std::make_shared<C>(std::forward<Args>(args)...); 
#endif 
} 
+0

Yazdığım cevap tam olarak buydu, ama sen beni dövdün. – bstamour

+0

Yaptığım şey buydu, ancak sonuçta ortaya çıkan 'shared_ptr 'öğesinin iki kez kopyalanmasını istemiyorum. –

+2

I'n gayet emin kopya en iyi duruma getirilmiş olacak –

İlgili konular