0

考虑以下示例代码。它按预期编译和工作。但是,如果我在 main 函数的第一行的开头添加“const”,它将无法编译,因为 B 类需要一个指向 A的指针,并且添加 const 后,我​​们将有一个指向const A的指针。模板化 B 是一种选择,但我想知道是否有更清洁/更好的解决方案。我愿意接受各种建议,包括将 B 移到 A 中(如果有帮助的话)(B 仅供 A 使用)。

#include <vector>

template <typename T>
class B;

template <typename T>
class A{
  friend class B<T>;

  std::vector<T> data;

public:
  A(int n) {
    data.resize(n); for (int i = 0; i < n; i++)
      data[i] = static_cast<T>(i);
  }
  B<T> getB(int pos) {return B<T>(this, pos);}
  const B<T> getB(int pos) const {return B<T>(this, pos);}
};

template <typename T>
class B {
    A<T>* pointerToA;
    int pos;
  public:
    B(A<T>* pointerToA_, int pos_) : pointerToA(pointerToA_), pos(pos_) {}
    T& get() const { return pointerToA->data[pos]; }
    T& get() { return pointerToA->data[pos]; }
  };

int main() {
  A<int> a(10); // const A<int> a(10); will not compile!
  int& i = a.getB(3).get();
}
4

0 回答 0