Как поместить некоторый код в несколько пространств имен, не дублируя этот код?

Предположим, у меня есть метод, определенный в двух разных пространствах имен:

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

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

foo::print() иbar::print() функцииабсолютно равны. Мой проект использует многочисленные вызовы этих функций.

Есть ли способ удалить один изprint() определениябез изменения вызовов этих функций? Я имею в виду что-то вроде следующего (конечно, язык C ++ не позволяет эту конструкцию,это просто пример):

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

Если нет способа реорганизовать код так, как я хочу, скажите, пожалуйста, вам нравится следующее решение? Будете ли вы рады, еслитвой проект содержит такой код? :)

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

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

ДОБАВЛЯТЬ:

Спасибо, ребята, я полностью удовлетворен вашими ответами. Только один момент, я хочу, чтобы вы уточнить: есть ли разница междуusing ::foo::print а такжеusing foo::print?

Ответы на вопрос(5)

Ваш ответ на вопрос