Re: How to simulate variadic templates?
On Jun 5, 6:27 pm, Peter Holtwick <peterholtw...@gmail.com> wrote:
With a current problem, I found the variadic templates in C++0x:http://en.wikipedia.org/wiki/C%2B%2B0x#Variadic_templates
I would need a template with variable number of parameters, but I need
them now! Is there a way to simulate this?
The background:
In an own implementation of a ref-count-pointer, there should be no
raw pointers at all. Therefore I create the object using a "New<>"
template.
template< class T > class Ptr;
template< class T >
Ptr<T> New()
{ /* ... */ }
template< class T, class T_ARG1 >
Ptr<T> New( T_ARG1 arg1 )
{ /* ... */ }
So I need a template for each number of arguments. Any way around
this? Maybe something like
Ptr<Obj> pObj = New<Obj> ( ARG( arg1, ARG( arg2, ARG( arg3 ) ) ) );
You can pack constructor arguments into one object - boost::tuple, or
something similar. This way you solve the argument forwarding problem
by having to forward one argument only. Constructors must be able to
unpack the tuple, however. Something like that:
class some
{
private:
void init(int, int, int);
public:
some(int a, int b, int c) // normal ctor
{ this->init(a, b, c); }
some(tuple<int, int, int> args) // one-argument unpacking ctor
{ this->init(args.get<0>(), args.get<1>(), args.get<2>()); }
};
// the factory function, only ever accepts one argument
template<class T, class Args>
Ptr<T> New(Args const& args)
{
return Ptr<T>(new T(args));
}
// usage
Ptr<some> p = New<some>(make_tuple(1, 2, 3));
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]