c++:使所有模板特化为友

  • 本文关键字:c++ c++
  • 更新时间 :
  • 英文 :


假设我有一个模板类,它需要访问它的任何专门化的私有字段:

template<std::size_t SIZE> class Buffer {
template<std::size_t N> friend class Buffer<N>;
...
};

这段代码不能编译:

<source>:4:42: error: specialization of 'template<long unsigned int SIZE> class Buffer' must appear at namespace scope
4 |     template<std::size_t N> friend class Buffer<N>;
|                                          ^~~~~~~~~

我如何实现这个行为?

考虑没有friend说明符的相同声明:

template<std::size_t N> class Buffer<N>;

这不是一个(主)类模板Buffer的声明,而是Buffer的部分专门化的声明。

(主)类模板本身的声明如下:

template<std::size_t N> class Buffer;

因此,将friend说明符添加到其中,并将类模板本身添加为好友,这意味着将它的所有专门化添加为好友:

template<std::size_t SIZE> class Buffer {
template<std::size_t N> friend class Buffer;
//...
};

相关内容

  • 没有找到相关文章

最新更新