必要に応じて const または非 const ポインターを返すことを除いて、const データと非 const データに対して同じように機能するテンプレート化された関数を作成したいと考えています。
たとえば、コンテナー内の一致する要素へのポインターを返したいとします。
template <class Container, class Pred>
typename Container::value_type* getValuePtrIf(Container& c, Pred pred)
{
auto it=std::find_if(c.begin(), c.end(), pred);
return (it!=c.end()) ? &(*it) : nullptr;
}
ただし、これを const および非 const 呼び出し用にビルドすることはできません。宣言から const を省略するとContainer& c
、const ポインターを返すことはできませんが、変更するとconst Container& c
const ポインターを返すことができますが、const 以外のケースは構築されません。
const
がテンプレート パラメータの一部として解釈されContainer
、この関数の 1 つのバージョンを定義するだけで済むように、これを定義する方法はありますか?