summaryrefslogtreecommitdiff
path: root/src/base/varargs.hh
diff options
context:
space:
mode:
Diffstat (limited to 'src/base/varargs.hh')
-rw-r--r--src/base/varargs.hh20
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;