如何让方法访问其他模板类实例的私有成员?

达里奥

这极小的例子将无法编译,因为A<int>不能访问私有成员iA<double>

template <class T>
class A {
    int i;
  public:
    template <class U>
    void copy_i_from( const A<U> & a ){
        i = a.i;
    }
};

int main(void) {
    A<int> ai;
    A<double> ad;
    ai.copy_i_from(ad);
    return 0;
}

我知道我可以使所有模板实例彼此成为朋友(请参阅:如何访问其他模板类实例的私有成员?),但是由于我只有一种需要访问的方法(如示例中所示),所以我更喜欢将友谊限制在这种方法上。这可能吗?

Angew不再为SO感到骄傲

是的,有可能。通常可以将成员函数指定为朋友。

template <class T>
class A {
    int i;
  public:
    template <class U>
    void copy_i_from( const A<U> & a ){
        i = a.i;
    }
  template <class F>
  template <class U>
  friend void A<F>::copy_i_from(const A<U> & a);
};

int main(void) {
    A<int> ai;
    A<double> ad;
    ai.copy_i_from(ad);
    return 0;
}

现场示例(gcc一个Ideone)


请注意,与gcc不同,clang拒绝代码我在标准中找不到任何会使它无效的东西。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何访问其他模板类实例的私有成员?

来自分类Dev

类方法如何访问相同类的另一个实例的私有成员?

来自分类Dev

如何避免使用反射访问类的私有成员?

来自分类Dev

从特权方法访问私有成员

来自分类Dev

如何访问对象的私有成员?

来自分类Dev

无法访问在类中声明的私有成员:队列类模板

来自分类Dev

如何访问从模板类继承的私有静态类成员?

来自分类Dev

访问使用接口实例化的类的私有成员

来自分类Dev

派生类无法使基类中的私有成员重载其他基类中的私有成员

来自分类Dev

为什么嵌套类的私有成员可以被封闭类的方法访问?

来自分类Dev

访问派生类C ++的私有成员

来自分类Dev

无法从C ++中的类内部访问私有成员?

来自分类Dev

类对象不能访问其自己的私有成员?

来自分类Dev

访问派生类C ++的私有成员

来自分类Dev

如何从具有继承关系的子类中访问基类中的私有成员(C ++)

来自分类Dev

为什么可以从其他实例访问“私有”方法?

来自分类Dev

如何从Swift扩展访问Objective-C类的私有成员?

来自分类Dev

如何启用朋友类的朋友功能直接在C ++中访问其私有成员

来自分类Dev

C ++如何在std :: for_each内部的类中访问私有成员

来自分类Dev

如何在 JavaScript 中访问超类的私有成员?

来自分类Dev

C ++ | 派生类正在访问基类的私有成员,而不是其自己的私有成员

来自分类Dev

访问Java中私有成员的公共方法

来自分类Dev

通过公共方法访问私有成员变量

来自分类Dev

方法可以访问参数的私有成员吗?

来自分类Dev

视觉组件的重载方法限制了对私有成员的访问

来自分类Dev

朋友班级如何访问嵌套班级的私有成员?

来自分类Dev

通过私有成员访问同一个类的私有成员变量

来自分类Dev

如何设置获取类的私有成员:寻找更好的方法

来自分类Dev

从基类继承的C ++公共方法无法访问派生类中的私有成员变量

Related 相关文章

  1. 1

    如何访问其他模板类实例的私有成员?

  2. 2

    类方法如何访问相同类的另一个实例的私有成员?

  3. 3

    如何避免使用反射访问类的私有成员?

  4. 4

    从特权方法访问私有成员

  5. 5

    如何访问对象的私有成员?

  6. 6

    无法访问在类中声明的私有成员:队列类模板

  7. 7

    如何访问从模板类继承的私有静态类成员?

  8. 8

    访问使用接口实例化的类的私有成员

  9. 9

    派生类无法使基类中的私有成员重载其他基类中的私有成员

  10. 10

    为什么嵌套类的私有成员可以被封闭类的方法访问?

  11. 11

    访问派生类C ++的私有成员

  12. 12

    无法从C ++中的类内部访问私有成员?

  13. 13

    类对象不能访问其自己的私有成员?

  14. 14

    访问派生类C ++的私有成员

  15. 15

    如何从具有继承关系的子类中访问基类中的私有成员(C ++)

  16. 16

    为什么可以从其他实例访问“私有”方法?

  17. 17

    如何从Swift扩展访问Objective-C类的私有成员?

  18. 18

    如何启用朋友类的朋友功能直接在C ++中访问其私有成员

  19. 19

    C ++如何在std :: for_each内部的类中访问私有成员

  20. 20

    如何在 JavaScript 中访问超类的私有成员?

  21. 21

    C ++ | 派生类正在访问基类的私有成员,而不是其自己的私有成员

  22. 22

    访问Java中私有成员的公共方法

  23. 23

    通过公共方法访问私有成员变量

  24. 24

    方法可以访问参数的私有成员吗?

  25. 25

    视觉组件的重载方法限制了对私有成员的访问

  26. 26

    朋友班级如何访问嵌套班级的私有成员?

  27. 27

    通过私有成员访问同一个类的私有成员变量

  28. 28

    如何设置获取类的私有成员:寻找更好的方法

  29. 29

    从基类继承的C ++公共方法无法访问派生类中的私有成员变量

热门标签

归档