Multiple dispatch in C++

前端 未结 3 761
梦毁少年i
梦毁少年i 2020-11-27 04:29

I am trying to understand what multiple dispatch is. I read a lot of various texts but I still have no idea what multiple dispatch is and what it is good for. Maybe the thin

3条回答
  •  一向
    一向 (楼主)
    2020-11-27 04:42

    Multi-dispatch is the ability to choose which version of a function to call based on the runtime type of the arguments passed to the function call.

    Here's an example that won't work right in C++ (untested):

    class A { };
    class B : public A { };
    class C : public A { }
    
    
    class Foo
    {
      virtual void MyFn(A* arg1, A* arg2) { printf("A,A\n"); }
      virtual void MyFn(B* arg1, B* arg2) { printf("B,B\n"); }
      virtual void MyFn(C* arg1, B* arg2) { printf("C,B\n"); }
      virtual void MyFn(B* arg1, C* arg2) { printf("B,C\n"); }
      virtual void MyFn(C* arg1, C* arg2) { printf("C,C\n"); }
    };
    
    void CallMyFn(A* arg1, A* arg2)
    {
      // ideally, with multi-dispatch, at this point the correct MyFn() 
      // would be called, based on the RUNTIME type of arg1 and arg2
      pFoo->MyFn(arg1, arg2);
    }
    
    ...
    
    A* arg1 = new B();
    A* arg2 = new C();
    // Using multi-dispatch this would print "B,C"... but because C++ only
    // uses single-dispatch it will print out "A,A"
    CallMyFn(arg1, arg2);
    

提交回复
热议问题