Core/Algorithm: Fix return type of Apply()
This commit is contained in:
parent
9328a8124d
commit
c58ec94e2d
|
|
@ -20,8 +20,8 @@ namespace Nz
|
||||||
class AbstractHash;
|
class AbstractHash;
|
||||||
class ByteArray;
|
class ByteArray;
|
||||||
|
|
||||||
template<typename F, typename Tuple> auto Apply(F&& fn, Tuple&& t);
|
template<typename F, typename Tuple> decltype(auto) Apply(F&& fn, Tuple&& t);
|
||||||
template<typename O, typename F, typename Tuple> auto Apply(O& object, F&& fn, Tuple&& t);
|
template<typename O, typename F, typename Tuple> decltype(auto) Apply(O& object, F&& fn, Tuple&& t);
|
||||||
template<typename T> ByteArray ComputeHash(HashType hash, const T& v);
|
template<typename T> ByteArray ComputeHash(HashType hash, const T& v);
|
||||||
template<typename T> ByteArray ComputeHash(AbstractHash* hash, const T& v);
|
template<typename T> ByteArray ComputeHash(AbstractHash* hash, const T& v);
|
||||||
template<typename T, std::size_t N> constexpr std::size_t CountOf(T(&name)[N]) noexcept;
|
template<typename T, std::size_t N> constexpr std::size_t CountOf(T(&name)[N]) noexcept;
|
||||||
|
|
|
||||||
|
|
@ -19,13 +19,13 @@ namespace Nz
|
||||||
{
|
{
|
||||||
// http://www.cppsamples.com/common-tasks/apply-tuple-to-function.html
|
// http://www.cppsamples.com/common-tasks/apply-tuple-to-function.html
|
||||||
template<typename F, typename Tuple, size_t... S>
|
template<typename F, typename Tuple, size_t... S>
|
||||||
auto ApplyImplFunc(F&& fn, Tuple&& t, std::index_sequence<S...>)
|
decltype(auto) ApplyImplFunc(F&& fn, Tuple&& t, std::index_sequence<S...>)
|
||||||
{
|
{
|
||||||
return std::forward<F>(fn)(std::get<S>(std::forward<Tuple>(t))...);
|
return std::forward<F>(fn)(std::get<S>(std::forward<Tuple>(t))...);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename O, typename F, typename Tuple, size_t... S>
|
template<typename O, typename F, typename Tuple, size_t... S>
|
||||||
auto ApplyImplMethod(O& object, F&& fn, Tuple&& t, std::index_sequence<S...>)
|
decltype(auto) ApplyImplMethod(O& object, F&& fn, Tuple&& t, std::index_sequence<S...>)
|
||||||
{
|
{
|
||||||
return (object .* std::forward<F>(fn))(std::get<S>(std::forward<Tuple>(t))...);
|
return (object .* std::forward<F>(fn))(std::get<S>(std::forward<Tuple>(t))...);
|
||||||
}
|
}
|
||||||
|
|
@ -44,7 +44,7 @@ namespace Nz
|
||||||
* \see Apply
|
* \see Apply
|
||||||
*/
|
*/
|
||||||
template<typename F, typename Tuple>
|
template<typename F, typename Tuple>
|
||||||
auto Apply(F&& fn, Tuple&& t)
|
decltype(auto) Apply(F&& fn, Tuple&& t)
|
||||||
{
|
{
|
||||||
constexpr std::size_t tSize = std::tuple_size<typename std::remove_reference<Tuple>::type>::value;
|
constexpr std::size_t tSize = std::tuple_size<typename std::remove_reference<Tuple>::type>::value;
|
||||||
|
|
||||||
|
|
@ -63,7 +63,7 @@ namespace Nz
|
||||||
* \see Apply
|
* \see Apply
|
||||||
*/
|
*/
|
||||||
template<typename O, typename F, typename Tuple>
|
template<typename O, typename F, typename Tuple>
|
||||||
auto Apply(O& object, F&& fn, Tuple&& t)
|
decltype(auto) Apply(O& object, F&& fn, Tuple&& t)
|
||||||
{
|
{
|
||||||
constexpr std::size_t tSize = std::tuple_size<typename std::remove_reference<Tuple>::type>::value;
|
constexpr std::size_t tSize = std::tuple_size<typename std::remove_reference<Tuple>::type>::value;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue