One can avoid dynamic dispatch by avoiding the 'virtual' keyword in the definition of the function, so long as one doesn't uses pointers, as explained in this link.
This creates some complications with generic methods and polymorphism. If one is using dynamic polymorphism, one would pass a pointer to the base class to a method, in which case the 'virtual' keyword is necessary for the pointer to determine which method to use. One can define a static polymorphic method using templates, as explained in the following link.