Решение 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();
}

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

1

Решение

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

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

Другие решения

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

return ::bar();
^^
2

По вопросам рекламы [email protected]