从命名空间中提取单个名称

时间:2018-04-03 19:47:13

标签: c++ namespaces

对于以下代码,我只想从名称空间main引入operator== Point boo的范围:

#include <iostream>

namespace boo
{
    struct Point {
        int x;
        int y;
    };
    bool operator==(Point const& first, Point const& second) {
        return true;
     }  
}

int main()
{
    using boo::operator==(Point const& first, Point const& second);
}

如果我刚刚using boo::operator==这样做了,这会有效,但它也可以吸引operator==中的所有其他boo

我如何才能进入这个?

我问,因为对于上面的代码,我收到以下错误

source_file.cpp:18:26: error: expected ';' after using declaration
    using boo::operator==(Point const& first, Point const& second);

1 个答案:

答案 0 :(得分:6)

你做不到。 using-declaration 引入名称,而不是单个实体。你也没有必要引入那个特定的operator==。在诸如p1 == p2之类的表达式中,p1p2具有类型Point,编译器将始终在名称空间中搜索operator== {{1}声明了。这称为argument-dependent lookup