netlist: type safety for delegates. (nw)

This commit is contained in:
couriersud 2019-01-31 01:03:32 +01:00
parent 1513c777b4
commit a80f10e1cf
2 changed files with 13 additions and 8 deletions

View File

@ -241,23 +241,28 @@ namespace plib {
{ {
public: public:
class generic_class; class generic_class;
template <class C>
using MemberFunctionType = R (C::*)(Targs...);
pmfp() : pmfp_base<R, Targs...>(), m_obj(nullptr) {} pmfp() : pmfp_base<R, Targs...>(), m_obj(nullptr) {}
template<typename MemberFunctionType, typename O> template<typename O>
pmfp(MemberFunctionType mftp, O *object) pmfp(MemberFunctionType<O> mftp, O *object)
: pmfp_base<R, Targs...>() : pmfp_base<R, Targs...>()
{ {
this->set(mftp, object); 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); this->set_base(mftp, object);
m_obj = reinterpret_cast<generic_class *>(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)...); return this->call(m_obj, std::forward<Targs>(args)...);
} }

View File

@ -2,7 +2,7 @@
// copyright-holders:Andrew Gardner, Couriersud // copyright-holders:Andrew Gardner, Couriersud
#include "netlist/devices/net_lib.h" #include "netlist/devices/net_lib.h"
#define USE_FRONTIERS 1 #define USE_FRONTIERS 0
#define USE_FIXED_STV 1 #define USE_FIXED_STV 1
/* ---------------------------------------------------------------------------- /* ----------------------------------------------------------------------------
@ -326,8 +326,8 @@ NETLIST_START(kidniki)
PARAM(Solver.ACCURACY, 1e-7) PARAM(Solver.ACCURACY, 1e-7)
PARAM(Solver.NR_LOOPS, 100) PARAM(Solver.NR_LOOPS, 100)
PARAM(Solver.GS_LOOPS, 300) PARAM(Solver.GS_LOOPS, 300)
PARAM(Solver.METHOD, "MAT_CR") //PARAM(Solver.METHOD, "MAT_CR")
//PARAM(Solver.METHOD, "GMRES") PARAM(Solver.METHOD, "GMRES")
//PARAM(Solver.SOR_FACTOR, 1.73) //PARAM(Solver.SOR_FACTOR, 1.73)
//PARAM(Solver.METHOD, "SOR") //PARAM(Solver.METHOD, "SOR")
#endif #endif