/* * FunctionList.h, part of VCMI engine * * Authors: listed in file AUTHORS in main folder * * License: GNU General Public License v2.0 or later * Full text of license available in license.txt file, in main folder * */ #pragma once VCMI_LIB_NAMESPACE_BEGIN /// List of functions that share the same signature - can be used to call all of them easily template class CFunctionList { std::vector > funcs; public: CFunctionList( std::nullptr_t ) { } CFunctionList( int ) { } CFunctionList( ){ } template CFunctionList(const Functor &f) { funcs.push_back(std::function(f)); } CFunctionList(const std::function &first) { if (first) funcs.push_back(first); } CFunctionList & operator+=(const CFunctionList &first) { for( auto & fun : first.funcs) { funcs.push_back(fun); } return *this; } void clear() { funcs.clear(); } operator bool() const { return !funcs.empty(); } template void operator()(Args ... args) const { std::vector > funcs_copy = funcs; for( auto & fun : funcs_copy) { if (fun) fun(args...); } } }; VCMI_LIB_NAMESPACE_END