相关疑难解决方法(0)

隐藏的朋友:声明和定义

安东尼·威廉姆斯在他最近的博客文章中谈到了隐藏的朋友。如果我理解正确的话,主要思想是在某些情况下 ADL 无法找到声明为友元的函数。简单的例子:

namespace N {
    struct A {
        friend void foo(A) { }
    };

    struct B {
        operator A();
    };

    // (*)
    void bar(A) { }
}

void func() {
    N::A a;
    bar(a);   // OK, bar is found via ADL
    foo(a);   // OK, foo is found via ADL

    N::B b;
    bar(b);   // OK, bar is found via ADL
    foo(b);   // NOT OK, foo cannot be found
}
Run Code Online (Sandbox Code Playgroud)

在博客文章的所有示例中,友元函数都是在类内定义的。是否可以声明一个友元函数,然后在该点定义它(*),以便它保持隐藏状态?看起来隐藏的朋友只能在类范围(或另一个编译单元)中定义。

c++ friend argument-dependent-lookup

12
推荐指数
2
解决办法
3211
查看次数

标签 统计

argument-dependent-lookup ×1

c++ ×1

friend ×1