2012-01-30 5 views
2

나는 pair<A,B>*을 원한다. make_pair(a,b)은 나에게 pair<A,B>을 줄 것입니다 (쌍이 포인터가 아닙니다). 한 쌍의 포인터를 만드는 표준 방법이 있습니까? 후에 두 단어 사이에 새로운 단어를 추가하려고 시도했지만 존재하지 않는 것 같습니다.표준 새 페어가 있습니까?

+1

'auto p = new pair (a, b) 외에'나는 그렇게 생각하지 않습니다. –

답변

2

없습니다. 직접 롤백 할 수 있습니다 :

template<typename X, typename Y> 
std::pair<typename std::decay<X>::type, typename std::decay<Y>::type>* 
heap_pair(X&& x, Y&& y) { 
    typedef typename std::decay<X>::type decayed_X; 
    typedef typename std::decay<Y>::type decayed_Y; 
    return new std::pair<decayed_X, decayed_Y>(
    std::forward<X>(x), 
    std::forward<Y>(y) 
); 
} 

그러나 할당 자 사용자 정의를 추가 할 수 있습니다.

+0

여기에'std :: forward <>'와'std :: decay <>'가 없다고 생각합니다 ... – ildjarn

+0

gcc 4.6.2의 make_pair 구현을 보면 100 % 정확함을 확신 할 수 없습니다. 참조 래퍼에서는 작동하지 않으므로 – pmr

+0

@ildjarn 게시 후 두 번 확인했습니다. 내 의견에서 언급 한 문제 외에도 지금 고쳐야합니다. – pmr