static vs dynamic dispatch

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

    static vs dynamic dispatch

    Hi,

    Can someone explain to me what static and dynamic dispatch are and what
    the difference is between the two? Do this even occurr in C++?

    Thanks

  • Xeranic

    #2
    Re: static vs dynamic dispatch

    The static and dynamic means the time to dispatch. The static dispatch
    be determined at compile time, dynamic at runtime. In C++ dynamic
    dispatch is implemented by using virtual function (or pointer to
    function as c style).

    On Dec 18, 8:13 am, "markww" <mar...@gmail.c omwrote:
    Hi,
    >
    Can someone explain to me what static and dynamic dispatch are and what
    the difference is between the two? Do this even occurr in C++?
    >
    Thanks

    Comment

    • markww

      #3
      Re: static vs dynamic dispatch

      Hi Xeranic,

      But what is 'dispatching'? What is being dispatched?

      Thanks

      Xeranic wrote:
      The static and dynamic means the time to dispatch. The static dispatch
      be determined at compile time, dynamic at runtime. In C++ dynamic
      dispatch is implemented by using virtual function (or pointer to
      function as c style).
      >
      On Dec 18, 8:13 am, "markww" <mar...@gmail.c omwrote:
      Hi,

      Can someone explain to me what static and dynamic dispatch are and what
      the difference is between the two? Do this even occurr in C++?

      Thanks

      Comment

      • Alf P. Steinbach

        #4
        Re: static vs dynamic dispatch

        * markww:
        Hi Xeranic,
        >
        But what is 'dispatching'? What is being dispatched?
        >
        Thanks
        >
        Xeranic wrote:
        >The static and dynamic means the time to dispatch. The static dispatch
        >be determined at compile time, dynamic at runtime. In C++ dynamic
        Please don't top-post.
        >dispatch is implemented by using virtual function (or pointer to
        >function as c style).
        >>
        >On Dec 18, 8:13 am, "markww" <mar...@gmail.c omwrote:
        >>Hi,
        >>>
        >>Can someone explain to me what static and dynamic dispatch are and what
        >>the difference is between the two? Do this even occurr in C++?
        >>>
        >>Thanks
        >

        --
        A: Because it messes up the order in which people normally read text.
        Q: Why is it such a bad thing?
        A: Top-posting.
        Q: What is the most annoying thing on usenet and in e-mail?

        Comment

        • Alan Johnson

          #5
          Re: static vs dynamic dispatch

          markww wrote:
          Hi,
          >
          Can someone explain to me what static and dynamic dispatch are and what
          the difference is between the two? Do this even occurr in C++?
          >
          Thanks
          >
          In the context of C++, "dispatch" is just a fancy name for calling a
          member function. A "static" dispatch is one where all the type
          information needed to decide which function to call is known at compile
          time. Consider the following example:

          #include <iostream>

          class A
          {
          public:
          void f() const { std::cout << "A::f()" << std::endl ; }
          } ;

          class B
          {
          public:
          void f() const { std::cout << "B::f()" << std::endl ; }
          } ;

          int main()
          {
          A a ;
          B b ;

          a.f() ;
          b.f() ;
          }

          Here, the compiler has all the type information needed to figure out
          which function "f" to call in each case. In the first call, A::f is
          called, and in the second, B::f is called.

          Dynamic dispatching is needed when it cannot be determined until runtime
          which function to call. In C++, this is implemented using virtual
          functions. Consider the following:

          #include <iostream>

          class base
          {
          public:
          virtual void f() const = 0 ;
          virtual ~base() {}
          } ;

          class A : public base
          {
          public:
          virtual void f() const { std::cout << "A::f()" << std::endl ; }
          } ;

          class B : public base
          {
          public:
          virtual void f() const { std::cout << "B::f()" << std::endl ; }
          } ;

          void dispatch(const base & x)
          {
          x.f() ;
          }

          int main()
          {
          A a ;
          B b ;

          dispatch(a) ;
          dispatch(b) ;
          }

          The line "x.f() ;" gets executed twice, but a different function gets
          called each time.

          --
          Alan Johnson

          Comment

          • markww

            #6
            Re: static vs dynamic dispatch


            Alan Johnson wrote:
            markww wrote:
            Hi,

            Can someone explain to me what static and dynamic dispatch are and what
            the difference is between the two? Do this even occurr in C++?

            Thanks
            >
            In the context of C++, "dispatch" is just a fancy name for calling a
            member function. A "static" dispatch is one where all the type
            information needed to decide which function to call is known at compile
            time. Consider the following example:
            >
            #include <iostream>
            >
            class A
            {
            public:
            void f() const { std::cout << "A::f()" << std::endl ; }
            } ;
            >
            class B
            {
            public:
            void f() const { std::cout << "B::f()" << std::endl ; }
            } ;
            >
            int main()
            {
            A a ;
            B b ;
            >
            a.f() ;
            b.f() ;
            }
            >
            Here, the compiler has all the type information needed to figure out
            which function "f" to call in each case. In the first call, A::f is
            called, and in the second, B::f is called.
            >
            Dynamic dispatching is needed when it cannot be determined until runtime
            which function to call. In C++, this is implemented using virtual
            functions. Consider the following:
            >
            #include <iostream>
            >
            class base
            {
            public:
            virtual void f() const = 0 ;
            virtual ~base() {}
            } ;
            >
            class A : public base
            {
            public:
            virtual void f() const { std::cout << "A::f()" << std::endl ; }
            } ;
            >
            class B : public base
            {
            public:
            virtual void f() const { std::cout << "B::f()" << std::endl ; }
            } ;
            >
            void dispatch(const base & x)
            {
            x.f() ;
            }
            >
            int main()
            {
            A a ;
            B b ;
            >
            dispatch(a) ;
            dispatch(b) ;
            }
            >
            The line "x.f() ;" gets executed twice, but a different function gets
            called each time.
            >
            --
            Alan Johnson
            Thanks Alan,

            Mark

            Comment

            Working...