解决类的cpp文件中的名称冲突

时间:2014-03-09 10:56:11

标签: c++ namespaces scope name-clash

我想在Foo的“bar”方法中从“somelib”调用未编码的函数“bar”。

// .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 个答案:

答案 0 :(得分:2)

明确范围,在本例中为全局范围:

return ::bar();
       ^^

答案 1 :(得分:2)

如果非成员bar函数在全局范围内,则可以使用作用域运算符::

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