diff options
Diffstat (limited to 'src/base/varargs.hh')
-rw-r--r-- | src/base/varargs.hh | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/src/base/varargs.hh b/src/base/varargs.hh index 2ba8c240a..4328f2057 100644 --- a/src/base/varargs.hh +++ b/src/base/varargs.hh @@ -147,15 +147,31 @@ struct Any : public Base<RECV> } }; +template <typename T, class RECV> +struct Any<T *, RECV> : public Base<RECV> +{ + const T *argument; + + Any(const T *arg) : argument(arg) {} + + virtual void + add_arg(RECV &receiver) const + { + receiver.add_arg(argument); + } +}; + template <class RECV> struct Argument : public RefCountingPtr<Base<RECV> > { - typedef RefCountingPtr<Base<RECV> > Base; + typedef RefCountingPtr<VarArgs::Base<RECV> > Base; Argument() { } Argument(const Null &null) { } template <typename T> Argument(const T& arg) : Base(new Any<T, RECV>(arg)) { } + template <typename T> + Argument(const T* arg) : Base(new Any<T *, RECV>(arg)) { } void add_arg(RECV &receiver) const @@ -169,7 +185,7 @@ template<class RECV> class List { public: - typedef Argument<RECV> Argument; + typedef VarArgs::Argument<RECV> Argument; typedef std::list<Argument> list; typedef typename list::iterator iterator; typedef typename list::const_iterator const_iterator; |