diff options
Diffstat (limited to 'src/lib/netlist/plib/pdynlib.h')
-rw-r--r-- | src/lib/netlist/plib/pdynlib.h | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/src/lib/netlist/plib/pdynlib.h b/src/lib/netlist/plib/pdynlib.h index 3a0c12a5f2d..f0883042111 100644 --- a/src/lib/netlist/plib/pdynlib.h +++ b/src/lib/netlist/plib/pdynlib.h @@ -35,6 +35,35 @@ private: void *m_lib; }; +template <typename R, typename... Args> +class dynproc +{ +public: + using calltype = R(*) (Args... args); + + dynproc() : m_sym(nullptr) { } + + dynproc(dynlib &dl, const pstring &name) + { + m_sym = dl.getsym<calltype>(name); + } + + void load(dynlib &dl, const pstring &name) + { + m_sym = dl.getsym<calltype>(name); + } + + R operator ()(Args&&... args) const + { + return m_sym(std::forward<Args>(args)...); + //return m_sym(args...); + } + + bool resolved() { return m_sym != nullptr; } +private: + calltype m_sym; +}; + } #endif /* PSTRING_H_ */ |