Unnamed "Formal Parameter"

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Mysooru

    #1

    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




  • John Harrison

    #2
    Re: Unnamed &quot;Formal Parameter&quot;


    "Mysooru" <nags_bhel@yaho o.com> wrote in message
    news:bfnpp5$9lu $1@news.mch.sbs .de...[color=blue]
    > 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
    >[/color]

    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("h ello");
    }

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

    john


    Comment

    • David White

      #3
      Re: Unnamed &quot;Formal Parameter&quot;

      Mysooru <nags_bhel@yaho o.com> wrote in message
      news:bfnpp5$9lu $1@news.mch.sbs .de...[color=blue]
      > 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[/color]

      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



      Comment

      • Mike Wahler

        #4
        Re: Unnamed &quot;Formal Parameter&quot;


        Mysooru <nags_bhel@yaho o.com> wrote in message
        news:bfnpp5$9lu $1@news.mch.sbs .de...[color=blue]
        > 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
        >
        >
        >
        >[/color]


        Comment

        Working...