BOOST_OPENMETHOD_DECLARE_OVERRIDER

Synopsis

Defined in <boost/openmethod/macros.hpp>.

#define BOOST_OPENMETHOD_DECLARE_OVERRIDER(NAME, (PARAMETERS...), RETURN_TYPE)

Description

Declares an overrider for a method, but does not start its definition. This macro can be used in header files.

ID is the identifier of the method to which the overrider is added.

ID must be an identifier. Qualified names are not allowed.

PARAMETERS is a comma-separated list of types, possibly followed by parameter names, just like in a function declaration.

The macro tries to locate a method that can be called with the same argument list as the overrider, possibly via argument dependent lookup.

Each virtual_ptr<T> in the method’s parameter list must have a corresponding virtual_ptr<U> parameter in the same position in the overrider’s parameter list, such that U is the same as T, or has T as an accessible unambiguous base.

Each virtual_<T> in the method’s parameter list must have a corresponding U parameter in the same position in the overrider’s parameter list, such that U is the same as T, or has T as an accessible unambiguous base.

Implementation Notes

The macro creates additional entities in the current scope.

  • A class template declaration that acts as a container for the method’s overriders in the current scope:

template<typename...> struct BOOST_OPENMETHOD_OVERRIDERS(NAME);
  • A specialization of the container for the overrider:

    struct BOOST_OPENMETHOD_OVERRIDERS(ID)<RETURN_TYPE(PARAMETERS...)> {
        static auto fn(PARAMETERS...) -> RETURN_TYPE;
        static auto has_next() -> bool;
        template<typename... Args>
        static auto next(typename... Args) -> RETURN_TYPE;
    };