したがって、次のようなコードがある場合:
shared_ptr<Foo> bar (my_normal_operator<Foo>(mumble));
型Foo
は左フィールドから出てきますが、戻り値の型は、指定されたものへの「追加」パターンのみを介して生成されるため、機能します。
template <typename Target, typename Source>
shared_ptr<Target> my_normal_operator(Source src)
{
/* ... whatever ... */
}
しかし、状況が次のようになったらどうなるでしょうか。
shared_ptr<Foo> bar (my_pointer_operator<Foo*>(mumble));
ポインターを型から引き離すには何らかの方法が必要です。掘り下げてstd::remove_pointerを見つけましたが、単純なアプリケーションでは「型/値の不一致」が発生します。
template <typename Target, typename Source>
shared_ptr< std::remove_pointer<Target>::type > my_pointer_operator(Source src)
{
/* ... whatever ... */
}
私は実際にそれが機能するとは思っていませんでした...しかし、私が探しているものの表現としてここに入れています。
はぁ。テンプレートと特性を使用して新しい領域に足を踏み入れるたびに、「自分が何をしているのかわからない」ミーム動物の1人のように感じます. :-/