と同じconst性と値を返す:は、私はこれらのオーバーロードと機能を持っているパラメータ
A& f(B& b)
{
return b.a;
}
const A& f(const B& b)
{
return b.a;
}
return文はb
がconstのであればconstのあるいくつかの値を返すはるかに複雑ロジックすることができます。たとえば、B
はコンテナのコンテナであり(おそらくより深いネスティングを持つ可能性があります)、1つの要素を検索しています。この場合、関数をコピーするのは良い考えではありません。同じ結果を達成するための選択肢はありますか?
私はいくつかの解決策について考えることができますが、私はそれらを本当に好きではありません。
template <typename T>
auto f(T& b) -> decltype(b.a)
{
return b.a;
}
それは動作しますが、そのb.a
はそう簡単ではありません場合(コンテナ内でのように)複雑になります。
A& f(B& b)
{
return b.a;
}
const A& f(const B& b)
{
return f(const_cast<B&>(b));
}
これは動作しますが、ハックのような感じです。シンプルでクリーンなソリューションはありますか?
'A&f(B&b){return f(const_cast(n));}'はどうですか?'const'を追加することはハックではなく、あなたはまだすべての保証を得ることができます。私は関数がconst入力に常に働くことができると仮定しています。 –
Jon
次に、出力をconst_castしなければならないので、基本的に同じです。しかし、はい、それはもっと安全です。 – petersohn