以下のコードの場合:
template<class _InIt,
class _Ty,
class _Fn2> inline
_Ty accumulateSimplePtr(_InIt _First, _InIt _Last, _Ty _Val, _Fn2 _Func)
{ // return sum of _Val and all in [_First, _Last), using _Func
for (; _First != _Last; ++_First)
{
if(is_class<std::iterator_traits<_InIt>::value_type>::value)
_Val = _Func(_Val, (*_First)());
else
_Val=_Func(_Val, *_First);
}
return (_Val);
}
_InIt がクラス/構造体または double などのポッドを指しているインターレーターであるかどうかを確認するにはどうすればよいですか?
double を指している場合は *_First を使用してデータを取得し、クラスを指している場合は (*_First)() を使用して実際のデータを取得します (クラスにオーバーロードされた演算子があると仮定して) ().
上記のようなことを試しましたが、「_Val=_Func(_Val, *_First);」という行でコンパイルに失敗し、MyObj を double に変換できないとのことでした。