|
proxygen
|
#include <cassert>#include <new>#include <type_traits>#include <typeinfo>#include <utility>#include <folly/CPortability.h>#include <folly/CppAttributes.h>#include <folly/Traits.h>#include <folly/detail/TypeList.h>#include <folly/lang/Assume.h>#include <folly/PolyException.h>#include <folly/detail/PolyDetail.h>#include <folly/Poly-inl.h>Go to the source code of this file.
Classes | |
| struct | folly::Poly< I > |
| struct | folly::PolyExtends< I > |
| struct | folly::PolyExtends< I >::Interface< Base > |
| struct | folly::Poly< I > |
Namespaces | |
| folly | |
| —— Concurrent Priority Queue Implementation —— | |
Macros | |
| #define | FOLLY_INLINE_CONSTEXPR constexpr |
| #define | FOLLY_POLY_MEMBERS(...) |
| #define | FOLLY_POLY_MEMBER(SIG, MEM) |
Typedefs | |
| template<class Node , class Tfx = detail::MetaIdentity, class Access = detail::PolyAccess> | |
| using | folly::PolySelf = decltype(Access::template self_< Node, Tfx >()) |
| using | folly::PolyDecay = detail::MetaQuote< std::decay_t > |
Functions | |
| template<std::size_t N, typename This , typename... As> | |
| auto | folly::poly_call (This &&_this, As &&...as) -> decltype(detail::PolyAccess::call< N >(static_cast< This && >(_this), static_cast< As && >(as)...)) |
| template<std::size_t N, class I , class Tail , typename... As> | |
| decltype(auto) | folly::poly_call (detail::PolyNode< I, Tail > &&_this, As &&...as) |
| template<std::size_t N, class I , class Tail , typename... As> | |
| decltype(auto) | folly::poly_call (detail::PolyNode< I, Tail > &_this, As &&...as) |
| template<std::size_t N, class I , class Tail , typename... As> | |
| decltype(auto) | folly::poly_call (detail::PolyNode< I, Tail > const &_this, As &&...as) |
| template<std::size_t N, class I , class Poly , typename... As, std::enable_if_t< detail::IsPoly< Poly >::value, int > = 0> | |
| auto | folly::poly_call (Poly &&_this, As &&...as) -> decltype(poly_call< N, I >(static_cast< Poly && >(_this).get(), static_cast< As && >(as)...)) |
| template<class T , class I > | |
| detail::AddCvrefOf< T, I > && | folly::poly_cast (detail::PolyRoot< I > &&that) |
| template<class T , class I > | |
| detail::AddCvrefOf< T, I > & | folly::poly_cast (detail::PolyRoot< I > &) |
| template<class T , class I > | |
| detail::AddCvrefOf< T, I > const & | folly::poly_cast (detail::PolyRoot< I > const &) |
| template<class T , class Poly , std::enable_if_t< detail::IsPoly< Poly >::value, int > = 0> | |
| constexpr auto | folly::poly_cast (Poly &&that) -> decltype(poly_cast< T >(std::declval< Poly >().get())) |
| template<class I > | |
| std::type_info const & | folly::poly_type (detail::PolyRoot< I > const &that) noexcept |
| template<class Poly , std::enable_if_t< detail::IsPoly< Poly >::value, int > = 0> | |
| constexpr auto | folly::poly_type (Poly const &that) noexcept-> decltype(poly_type(that.get())) |
| template<class I > | |
| bool | folly::poly_empty (detail::PolyRoot< I > const &that) noexcept |
| template<class I > | |
| constexpr bool | folly::poly_empty (detail::PolyRoot< I && > const &) noexcept |
| template<class I > | |
| constexpr bool | folly::poly_empty (detail::PolyRoot< I & > const &) noexcept |
| template<class I > | |
| constexpr bool | folly::poly_empty (Poly< I && > const &) noexcept |
| template<class I > | |
| constexpr bool | folly::poly_empty (Poly< I & > const &) noexcept |
| template<class I , std::enable_if_t< detail::Not< std::is_reference< I >>::value, int > = 0> | |
| constexpr Poly< I > && | folly::poly_move (detail::PolyRoot< I > &that) noexcept |
| template<class I , std::enable_if_t< detail::Not< std::is_const< I >>::value, int > = 0> | |
| Poly< I && > | folly::poly_move (detail::PolyRoot< I & > const &that) noexcept |
| template<class I > | |
| Poly< I const & > | folly::poly_move (detail::PolyRoot< I const & > const &that) noexcept |
| template<class Poly , std::enable_if_t< detail::IsPoly< Poly >::value, int > = 0> | |
| constexpr auto | folly::poly_move (Poly &that) noexcept-> decltype(poly_move(that.get())) |
| template<class I > | |
| void | folly::swap (Poly< I > &left, Poly< I > &right) noexcept |
Variables | |
| template<class Sig > | |
| constexpr detail::Sig< Sig > const | folly::sig = {} |
| #define FOLLY_POLY_MEMBER | ( | SIG, | |
| MEM | |||
| ) |
Use FOLLY_POLY_MEMBER(SIG, MEM) on pre-C++17 compilers to specify a member function binding that needs to be disambiguated because of overloads. SIG should the (possibly const-qualified) signature of the MEM member function pointer.
For example:
struct IFoo {
template <class Base> struct Interface : Base {
int foo() const { return folly::poly_call<0>(*this); }
};
template <class T> using Members = FOLLY_POLY_MEMBERS(
// This works even if T::foo is overloaded:
FOLLY_POLY_MEMBER(int()const, &T::foo)
);
};
Definition at line 158 of file Poly.h.
Referenced by TEST().
| #define FOLLY_POLY_MEMBERS | ( | ... | ) |
Use FOLLY_POLY_MEMBERS(MEMS...) on pre-C++17 compilers to specify a comma-separated list of member function bindings.
For example:
struct IFooBar {
template <class Base>
struct Interface : Base {
int foo() const { return folly::poly_call<0>(*this); }
void bar() { folly::poly_call<1>(*this); }
};
template <class T>
using Members = FOLLY_POLY_MEMBERS(&T::foo, &T::bar);
};
Definition at line 136 of file Poly.h.
Referenced by TEST().