2012-01-30 21 views
2

私はpair<A,B>*が欲しいです。 make_pair(a,b)は私にpair<A,B>を与えます(ペアはポインタではありません)。ペアのポインタを作る標準的な方法はありますか?私は2つの単語の後に、そしてその間に新しいものを追加しようとしましたが、それは存在しないようです。標準的な新しいペアを作りますか?

+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

関連する問題