f



Unnamed "Formal Parameter"

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




0
nags_bhel (3)
7/24/2003 5:24:29 AM
comp.lang.c++ 49190 articles. 1 followers. Post Follow

3 Replies
336 Views

Similar Articles

[PageSpeed] 16

"Mysooru" <nags_bhel@yahoo.com> wrote in message
news:bfnpp5$9lu$1@news.mch.sbs.de...
> 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


0
7/24/2003 5:26:28 AM
Mysooru <nags_bhel@yahoo.com> wrote in message
news:bfnpp5$9lu$1@news.mch.sbs.de...
> 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



0
no4133 (566)
7/24/2003 5:27:22 AM
Mysooru <nags_bhel@yahoo.com> wrote in message
news:bfnpp5$9lu$1@news.mch.sbs.de...
> 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
>
>
>
>


0
mkwahler (3821)
7/24/2003 6:11:33 AM
Reply: