我有一个类(class)模板

template< typename G, int N > class Foo { /* ... */ };

我希望N=0的特化成为另一个类的 friend ,但是我不知道它的语法(而且我自己也找不到它)。我试过了:
template< typename T >
class Bar {
  template< typename G > friend class Foo< G, 0 >;

  /* ... */
};

我希望任何类型的G Foo< G, 0 >成为class Bar< T >的 friend 。正确的语法是什么?

谢谢!

最佳答案

在C++ 03中,这是不可能的。 C++标准14.5.3/9表示以下内容:



如另一个答案中所述,可能存在一些解决此问题的方法,但是您所要求的特定功能在该标准中不可用。

幸运的是,如今C++ 11得到了很好的支持,并且具有指定模板别名的能力,我们可以实现以下目标:

template <typename, typename> struct X{};

template <typename T>
struct Y
{
    template <typename U> using X_partial = X<T, U>;
    template <typename> friend class X_partial;
};

关于c++ - 部分专业的模板 friend ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18212329/

10-10 21:25
查看更多