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