#ifndef OGPC_PMANAGER_H_ #define OGPC_PMANAGER_H_ inline namespace { template struct FuncArgTraits; template struct FuncArgTraits { using type = T; }; } #include #include #include class ProcedureManager { public: ProcedureManager(); template void registerProcedure(const std::string &name, T&& func) { procedures[name] = [&func](BinraryBuffer &b) -> BinaryBuffer { using Arg = typename FuncArgTraits::type; Arg x; b >> x; auto y = func(std::move(x)); BinaryBuffer res; res << y; return res; }; } private: std::map> procedures; }; #endif