¿Cómo coloco algún código en múltiples espacios de nombres sin duplicar este código?

Supongamos que tengo el método definido en los dos espacios de nombres diferentes:

namespace foo
{
    void print()
    {
        //do work...
    }
}

namespace bar
{
    void print()
    {
        //do work...
    }
}

losfoo::print() y elbar::print() las funciones sonabsolutamente igual. Mi proyecto utiliza las numerosas llamadas de estas funciones.

¿Hay alguna manera de eliminar uno de losprint() definicionesSin cambiar las llamadas de estas funciones.? Me refiero a algo como lo siguiente (por supuesto, el lenguaje C ++ no permite esta construcción,es solo un ejemplo):

namespace foo, bar  //wrong code!
{
    void print()
    {
        //do work...
    }
}

Si no hay manera de refactorizar el código como deseo, dígame, ¿le gusta la siguiente decisión? Te alegrarías situ ¿El proyecto contiene tal código? :)

namespace foo
{
    void print()
    {
        //do work...
    }
}

namespace bar
{
    void print()
    {
        foo::print();
    }
}

AÑADIR:

Gracias chicos, estoy completamente satisfecho con sus respuestas. Solo un momento quiero que aclaren: ¿hay una diferencia entreusing ::foo::print yusing foo::print?

Respuestas a la pregunta(5)

Su respuesta a la pregunta