私は以下のような関数を持っています。C++で引数としてスマートポインタのコンテナを渡す
void functionA(unordered_map<string, classA*>* arg1);
unordered_map<string, shared_ptr<classA>>
に渡す必要がありますどのように私は生のポインタのコンテナを取る関数にshared_ptrとコンテナを渡すことができますか?私はここでC++ 0xを使用しています。
ありがとう
私は以下のような関数を持っています。C++で引数としてスマートポインタのコンテナを渡す
void functionA(unordered_map<string, classA*>* arg1);
unordered_map<string, shared_ptr<classA>>
に渡す必要がありますどのように私は生のポインタのコンテナを取る関数にshared_ptrとコンテナを渡すことができますか?私はここでC++ 0xを使用しています。
ありがとう
あなたはここに、尋ねたので、テンプレートは、この機能のためにどのように見えるかです:
template <typename MAP_TYPE>
void functionA(const MAP_TYPE& arg1)
{
// Use arg1 here
}
あなたは、ポインタを使用し、および/またはあなたならば非const作ることができます必要です。渡されたマップが、互換性のあるキー型と、値として正しい型への何らかのポインタを使用している限り、それはコンパイルして実行する必要があります。ポインタがネイティブポインタかスマートポインタかは、関数の実装でどのように使用されたかによって違いはありません。
あなたが関数Aを変更したり、それが受信したいタイプの一時的なunordered_mapを構築するためにどちらかの必要があるとしています。
形unordered_map<string, shared_ptr<classA>>
およびunordered_map<string, classA*>
は、関連性のない種類です。
したがって、もう一方が予想される場所に直接渡すことはできません。
次のことが可能です。
変更あなたの関数の署名を、または
は、予想されるタイプのオブジェクトにデータをコピーします。
ところで、ポインタ引数の代わりに参照引数を考慮してください。
また、const
を追加することをお勧めします。–通常、コードを理解しやすくするために役立ちます。なぜなら、非変更の保証があるからです。 。
乾杯& HTH、
あなたは 'functionA'の定義を管理していますか? –
こんにちはフレッド、私はおそらくshared_ptrでunordered_mapを取る別のfunctionBを定義することができます。しかし、私はまだfunctionAが必要です。そして、両方の関数が同じことをして、唯一の違いがプロトタイプにあるので、ここでコードの重複を避けることができますか? – Steveng
私が持っていた考えの1つは、 'functionA'をテンプレートにしていたので、どんな種類のマップでも、予想されるインターフェースに合ったものを渡すことができました。 –