c++ - 允许类访问单个私有(private)成员

标签 c++ friend private-methods

我有一个类 A,它有一个名为 a() 的私有(private)方法。我还有一个需要访问 a() 的 B 类(但只有 B 应该可以访问 a(),这就是为什么 a() 是私有(private)的)。我现在可以使用友元说明符,但这会使 A 的其他私有(private)方法(我们称它们为 b() 和 c())也可用于 B,我不希望出现这种行为。

有没有办法让 B 只能访问 A 的 a()?

最佳答案

有一种方法——如果你的类有一个公共(public)模板函数:

class A {
    // apparently private
    void priv () { std::cout << "got you A::a()" << std::endl ; }
public:
    template <class T> 
    void abuse() {}
    };


struct Thief {};

template <>
void A::abuse<Thief>() {
    this->priv();
    }

int main() {
    A a;
    // obviously do not compile :   a.priv();
    // this i OK
    a.abuse<Thief>();

    return 0;
    }

我必须承认我从 GotW 偷了这个...

关于c++ - 允许类访问单个私有(private)成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8700905/

相关文章:

c++ - Friend 模板重载运算符 << : unresolved external symbol

jmockit - 如何在 Jmockit 中模拟私有(private)方法时匹配 'any' 参数类型

c++ - 为什么我不能删除 vector 的最后一个元素

c++ - 我应该如何使我的分配器可重新绑定(bind)?我可以在保持其字段私有(private)的同时做到这一点吗?

c++ - 来自 WinHTTP Async 的句柄是否需要关闭?

c++ - g++ 和 clang++ 与在模板类中定义的友元模板函数的不同行为

java - 方法检索和继承困惑

java - 模拟已标记为可访问的私有(private)方法的返回值

c++ - C++ 指针运算符列表

C++ cout char 'return' 文件中的字符出现两次