diff options
| author | 2019-01-31 01:03:32 +0100 | |
|---|---|---|
| committer | 2019-01-31 01:45:34 +0100 | |
| commit | a80f10e1cfe5d5a572b649bebb36cbb9d39053ab (patch) | |
| tree | 52075bb9d62c0e2dbbe548c1c8b70d09f0f52b36 /src/lib | |
| parent | 1513c777b47d19c7df99ba43142d7a334392a0b5 (diff) | |
netlist: type safety for delegates. (nw)
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/netlist/plib/ppmf.h | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/src/lib/netlist/plib/ppmf.h b/src/lib/netlist/plib/ppmf.h index dc151d5d6a6..4f0e8b7ba07 100644 --- a/src/lib/netlist/plib/ppmf.h +++ b/src/lib/netlist/plib/ppmf.h @@ -241,23 +241,28 @@ namespace plib { { public: class generic_class; + + template <class C> + using MemberFunctionType = R (C::*)(Targs...); + pmfp() : pmfp_base<R, Targs...>(), m_obj(nullptr) {} - template<typename MemberFunctionType, typename O> - pmfp(MemberFunctionType mftp, O *object) + template<typename O> + pmfp(MemberFunctionType<O> mftp, O *object) : pmfp_base<R, Targs...>() { this->set(mftp, object); } - template<typename MemberFunctionType, typename O> - void set(MemberFunctionType mftp, O *object) + + template<typename O> + void set(MemberFunctionType<O> mftp, O *object) { this->set_base(mftp, object); m_obj = reinterpret_cast<generic_class *>(object); } - inline R operator()(Targs... args) + inline R operator()(Targs ... args) { return this->call(m_obj, std::forward<Targs>(args)...); } |
