Unnamed "Formal Parameter"

M

Mysooru

Hi All,


One of the ATL class.....

template <class Base>
class CComObject : public Base
{
public:
typedef Base _BaseClass;
CComObject(void* = NULL)
{
..............
}
:
:
};

Constructor takes parameter "void* = NULL",
how this unnamed parameter to the constructor is used

Thanks and Regards
HoRaNa
 
J

John Harrison

Mysooru said:
Hi All,


One of the ATL class.....

template <class Base>
class CComObject : public Base
{
public:
typedef Base _BaseClass;
CComObject(void* = NULL)
{
..............
}
:
:
};

Constructor takes parameter "void* = NULL",
how this unnamed parameter to the constructor is used

Thanks and Regards
HoRaNa

It's not. The parameter is there so that CComObject is compatible with other
classes such as CComPolyObject. Both CComObject, CComPolyObject and others
might be used as parameters to the template CComCreator which assumes that a
constructir which takes one parameter exists.

For instance

class A
{
public:
A(void* = 0) {} // unused parameter
};

class B
{
public:
B(void* p) : pp(p) {} // used parameter
private:
void* pp;
};

template <class T>
class C
{
public:
static T* create(void* p = 0) { return new T(p); }
};

int main()
{
A* a = C<A>::create();
B* b = C<B>::create("hello");
}

C<A>::create would not compile unless A::A had a parameter even though it is
not used.

john
 
D

David White

Mysooru said:
Hi All,


One of the ATL class.....

template <class Base>
class CComObject : public Base
{
public:
typedef Base _BaseClass;
CComObject(void* = NULL)
{
..............
}
:
:
};

Constructor takes parameter "void* = NULL",
how this unnamed parameter to the constructor is used

It isn't used. Maybe the designers included the pointer for possible use in
a future version that would not require existing code being re-compiled.

DW
 
M

Mike Wahler

Mysooru said:
Hi All,


One of the ATL class.....

template <class Base>
class CComObject : public Base
{
public:
typedef Base _BaseClass;
CComObject(void* = NULL)
{
..............
}
:
:
};

Constructor takes parameter "void* = NULL",
how this unnamed parameter to the constructor is used

Thanks and Regards
HoRaNa
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,578
Members
45,052
Latest member
LucyCarper

Latest Threads

Top