118#if BIO_CPP_VERSION >= 17
121 #include <functional>
129template<
class WAVE,
typename RETURN,
typename... ARGUMENTS >
131 public ExcitationBase,
144 Excitation(RETURN(WAVE::*function)(ARGUMENTS...),
const ARGUMENTS&... args)
146 physical::Class< Excitation<WAVE,RETURN,ARGUMENTS...> >(this),
147 m_function(function),
167 Properties ret = PeriodicTable::Instance().GetPropertiesOf< WAVE >();
177 virtual void EditArg(uint8_t position, ByteStream& newVal)
187 RETURN operator()(WAVE* wave)
const
189 std::tuple allArgs = std::tuple_cat(std::make_tuple(wave), m_args);
190 return std::apply(*m_function, allArgs);
196 virtual void CallDown(physical::Wave* wave, ByteStream* ret)
const
198 ret->Set(this->
operator()(ForceCast<WAVE*>(wave)));
202 RETURN (WAVE::*m_function)(ARGUMENTS...)
213template <
class WAVE,
typename RETURN >
251 Properties ret = PeriodicTable::Instance().GetPropertiesOf< WAVE >();
277 ret->
Set(this->
operator()(ForceCast< WAVE* >(wave)));
290template <
class WAVE,
typename RETURN,
typename ARGUMENT >
293 public physical::Class< ExcitationWithArgument< WAVE, RETURN, ARGUMENT > >
308 RETURN(WAVE::*function)(ARGUMENT),
333 Properties ret = PeriodicTable::Instance().GetPropertiesOf< WAVE >();
373 ret->
Set(this->
operator()(ForceCast< WAVE* >(wave)));
389template <
class WAVE,
typename RETURN,
typename ARGUMENT1,
typename ARGUMENT2 >
392 public physical::Class< ExcitationWithTwoArguments< WAVE, RETURN, ARGUMENT1, ARGUMENT2 > >
407 RETURN(WAVE::*function)(
437 Properties ret = PeriodicTable::Instance().GetPropertiesOf< WAVE >();
486 ret->
Set(this->
operator()(ForceCast< WAVE* >(wave)));
#define BIO_DISAMBIGUATE_ALL_CLASS_METHODS(ns, caller)
#define BIO_SANITIZE(test, success, failure)
virtual Properties GetProperties() const
virtual ~ExcitationBase()
BIO_DISAMBIGUATE_ALL_CLASS_METHODS(physical, ExcitationBase) ExcitationBase()
virtual void EditArg(uint8_t position, ByteStream &newVal)
virtual void CallDown(physical::Wave *wave, ByteStream *ret) const
static Properties GetClassProperties()
virtual void EditArg(uint8_t position, ByteStream &newVal)
RETURN(WAVE::* m_function)(ARGUMENT)
virtual Properties GetProperties() const
virtual ~ExcitationWithArgument()
BIO_DISAMBIGUATE_ALL_CLASS_METHODS(physical, BIO_SINGLE_ARG(ExcitationWithArgument< WAVE, RETURN, ARGUMENT >)) ExcitationWithArgument(RETURN(WAVE
virtual void CallDown(physical::Wave *wave, ByteStream *ret) const
RETURN operator()(WAVE *wave) const
virtual void EditArg(uint8_t position, ByteStream &newVal)
virtual ~ExcitationWithTwoArguments()
BIO_DISAMBIGUATE_ALL_CLASS_METHODS(physical, BIO_SINGLE_ARG(ExcitationWithTwoArguments< WAVE, RETURN, ARGUMENT1, ARGUMENT2 >)) ExcitationWithTwoArguments(RETURN(WAVE
virtual void CallDown(physical::Wave *wave, ByteStream *ret) const
RETURN(WAVE::* m_function)(ARGUMENT1, ARGUMENT2)
virtual Properties GetProperties() const
RETURN operator()(WAVE *wave) const
RETURN operator()(WAVE *wave) const
BIO_DISAMBIGUATE_ALL_CLASS_METHODS(physical, BIO_SINGLE_ARG(ExcitationWithoutArgument< WAVE, RETURN >)) ExcitationWithoutArgument(RETURN(WAVE
virtual ~ExcitationWithoutArgument()
RETURN(WAVE::* m_function)()
virtual void CallDown(physical::Wave *wave, ByteStream *ret) const
virtual Properties GetProperties() const
#define BIO_SINGLE_ARG(...)