質問する
4998 次
1 に答える
10
あなたの場合の問題は、 different から/への変換の可能性ではありませんが、std::shared_ptr
テンプレート関数の型推論の仕組みに関連しています。
コンパイラが関数呼び出しをテンプレートと一致させようとすると、完全一致のみが受け入れられます。つまり、型変換はまったく受け入れられません。この場合、関数は を受け取りstd::shared_ptr<const T>
、呼び出し元はstd::shared_ptr<U>
where U
is notを持ちconst
ます。完全一致ではないため、テンプレートを破棄して次のオーバーロード候補を選択します。
簡単な回避策は次のとおりです: 型推論を完全に回避し、テンプレート引数を提供します。
std::shared_ptr<A> p;
foo<A>(p); // will use the templated shared_ptr conversion
または、自分で変換を実行します。
foo(std::shared_ptr<const A>(p));
于 2012-10-03T15:56:36.900 に答える