Reference:
https://mpark.github.io/programming/2017/08/08/using-killed-the-FUN-on-GCC-5/
Surrogate Call Function:
http://en.cppreference.com/w/cpp/language/overload_resolution#Call_to_a_class_object
sample code:
or just:
Originally(SLOW) using inheritance introduce function name overloading for avoiding hidden ancestor type's function name:
https://mpark.github.io/programming/2017/08/08/using-killed-the-FUN-on-GCC-5/
Surrogate Call Function:
http://en.cppreference.com/w/cpp/language/overload_resolution#Call_to_a_class_object
sample code:
template <typename Head, typename... Tail>
struct FUN;
// Base case.
template <typename Head>
struct FUN<Head> {
using F = Head (*)(Head);
operator F() const;
};
// Recursive case.
template <typename Head, typename... Tail>
struct FUN : FUN<Tail...> {
using F = Head (*)(Head);
operator F() const;
};
or just:
template <typename T>
struct FUN_leaf {
using F = T (*)(T);
operator F() const;
};
template <typename... Ts>
struct FUN : FUN_leaf<Ts>... {};
Originally(SLOW) using inheritance introduce function name overloading for avoiding hidden ancestor type's function name:
template <typename Head, typename... Tail>
struct FUN;
// Base case.
template <typename Head>
struct FUN<Head> {
Head operator()(Head) const;
};
// Recursive case.
template <typename Head, typename... Tail>
struct FUN : FUN<Tail...> {
using FUN<Tail...>::operator();
Head operator()(Head) const;
};
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.