/* * 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 /// 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 ...); } } };