Решение name-clash в cpp файле класса

Я хотел бы вызвать функцию unsoped "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();
}

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

2 ответа

Решение

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

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

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

return ::bar();
       ^^
Другие вопросы по тегам