Устранение конфликта имен в cpp файле класса

Я хотел бы вызвать функцию «bar» с незаданной областью из «somelib» в методе «bar» Foo.

// .h
class Foo
{
    int bar();
};

// .cpp
#include "Foo.h"
#include <somelib> // contains unscooped function bar()

int Foo::bar()
{
    return bar(); // unwanted recursive function
}

Один из способов решить эту проблему - использовать вспомогательную функцию, например bar_helper.

// .cpp
#include "Foo.h"
#include <somelib> // contains unscooped function bar()

// unnamed namespace
namespace
{
    int bar_helper()
    {
        return bar(a);
    }
}

int Foo::bar()
{
    return bar_helper();
}

  • Можно ли сделать его красивее?
  • Есть ли лучшее решение?

person Adelost    schedule 09.03.2014    source источник


Ответы (2)


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

int Foo::bar()
{
    return ::bar();
}
person Some programmer dude    schedule 09.03.2014

Четко укажите объем, в данном случае глобальный:

return ::bar();
       ^^
person juanchopanza    schedule 09.03.2014
comment
Спасибо за помощь! Мне пришлось выбрать ответ Иоахима, поскольку мне немного больше понравилось его объяснение, однако я должен поблагодарить вас за то, что вы ответили на несколько секунд раньше, чем он. - person Adelost; 09.03.2014