2012-11-02 5 views
6

프로젝트를 C++ 11로 마이그레이션 중이므로되도록 많은 표준 라이브러리를 사용하려고합니다.템플릿 함수 (boost :: make_shared)에 대한 'typedef'

마이 그 레이션을 완료하기 전에 벤치 마크, 단위 테스트 등을 수행하기 위해 shared_ptr의 부스트와 STL 구현 사이를 전환하는 빠른 방법이 필요합니다.

그래서 나는이 같은 shared_ptr 별칭을 정의 :

#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 

지금은 make_shared 위해 동일을 할 필요가 ...하지만 어떻게? 매크로? 래퍼? 나는 그들 중 누구도 정말로 좋아하지 않는다. 대안은 무엇입니까? 가변 인자 템플릿과 완벽한 전달을 사용

+1

당신은 선택의 여지가 없습니다. – Puppy

답변

7

: 빠른 래퍼를 작성 제외한

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

정확히 내가 쓰고있는 대답 이었지만, 당신은 나를 때렸다. – bstamour

+0

이것은 내가 한 일이지만'shared_ptr '이 두 번 복사된다는 사실을 싫어합니다. –

+2

복사가 최적화 될 것이라고 확신합니다. –

관련 문제