0

有以下 c++ 原始代码:

template<typename T>
class A {
 private:
  // here I want to access B::SomeStruct to create SomeStruct field in class A
};

template<typename T>
class B {
 private:
  template<typename Tp>
  friend class A;

  struct SomeStruct {
    void some_field;
  };
};

在 AI 类中,想要创建一个类型为SomeStruct- 在 B 类中声明为私有成员的结构的字段。它甚至可能吗?

限制:

  1. 禁止创建全局结构,可访问 A 和 B 类。
  2. 禁止在 B 类中创建任何公共字段。
4

1 回答 1

0

这将是一种方式。所有B:s 与所有 :s 成为朋友AA<T>拥有一个B<T>::SomeStruct成员:

template<typename T>
class B {
private:
    template<typename Tp>
    friend class A;

    struct SomeStruct {};
};

template<typename T>
class A {
private:
    // 'typename' prior to dependent type name 'B<T>::SomeStruct':
    typename B<T>::SomeStruct ss;
};
于 2020-11-25T08:45:15.480 回答