テンプレートテンプレートパラメータを持つこの単純な関数があります。 (それがC++ 03のプロジェクトだが、私はまた、C++ 11のための答えに興味がある)、STLコンテナを取る通常のPTRにスマートPTRを変換するためのものです:テンプレートテンプレートクラス、存在する場合は関数を呼び出す
template <template <typename _T, typename = std::allocator<_T> > class Container>
static Container<T*> GetRawPtrContainer(const Container<SmartPtr<T> >& input_container)
{
Container<T*> container;
for(typename Container<SmartPtr<T> >::const_iterator it = input_container.begin();
it != input_container.end();
it++)
{
container.push_back(it->ptr);
}
return container;
}
ですクラスSmartPtr<T>
の静的メンバー関数です。
これはすべてpush_back
です。input_container
から別のものへのすべての要素です。
あなたが入力std::vector
であれば、これはstd::list
とstd::deque
の罰金ですが、その後、O(1)
挿入のパフォーマンスの問題が、ありますことに気づいたかもしれません。だから、(コンパイル時に決定)が可能かどうループ前コールこれをは私がやりたいものです:
container.reserve(input_container.size());
私はそれをどのように行うことができますか?
申し訳ありませんが、C++ 03の例が私が提起した問題のために働く例を示すことができますか? –
ちょうどこのように:https://pastebin.com/c4NARK3e – ACB
答えに追加できますか?私の会社のファイアウォールはpastebinをブロックします。 –