2 değeri ve bir functor veya bir lambda kabul eden bir şablon işlevi yazmak istiyorum. Fonksiyon, functor'ı bu değerlerle çağırır ve sonucu döndürür.Functor'ın dönüş değeri nasıl hesaplanır?
template <typename T, typename Fn>
_ReturnTypeOfPred_ Apply(T x, T y, Fn fn)
{
return fn(x, y);
}
Soru: Apply
dönüş türünü tanımlamak nasıl Fn
dönüş türü eşit olmak? Bu 1 örnek basitleştirilmiş edildi
funktor
template <typename T>
auto Sum(T x, T y) -> decltype(x+y)
{
return x+y;
}
Güncelleme bu örnekte olduğu gibi T
için mutlaka eşit değildir. Bu bir işe yarıyor mu? Ben dönüş türü decltype
yılında return
ifadesini tekrarlamak durumunda
template <typename TContainer, typename Fn> auto Apply(const TContainer& x, const TContainer& y, Fn fn) -> decltype(fn(x.front(), y.front())) { return fn(x.front(), y.front()); }
hep işe yarar mı? Daha zarif bir yolu var mı?
Alt-başkent isimleri uygulama için ayrılmıştır. Bunları kendi kodunuzda kullanmamalısınız. –
@KerrekSB: Gerçek bir kod değil, gerçek bir kod – Andrey
İyi funktörler (STL'de olduğu gibi) her zaman kendi 'return_type'lerini tanımlar, böylece sadece' Fn :: return_type' kullanabilirsiniz. Ama anladığım kadarıyla, iyi-fun-funtörler için de çalışan bir cevap istiyorsun. – Gorpik