C++ 中模板类的友元声明

问题描述 投票:0回答:1
#include <iostream>

class MyClass {
 public:
  template <typename U>
  friend class MyTemplateClass<U>;
};

int main() { return 0; }

上面提供的代码尝试将 MyTemplateClass 声明为 MyClass 的友元类。 但是,当编译器将其误解为“模板类 MyTemplateClass”的特化时,问题就出现了,这显然不是有意的?

这有效:

  template <typename U>
  friend class MyTemplateClass;

我不明白为什么会声明一个类型变量U,但不会在友元声明中使用它,如果目的是表明MyTemplateClass是一个模板类,那为什么我们不能直接使用它:

  template <>
  friend class MyTemplateClass;
c++ templates friend
1个回答
0
投票

这是模板特化声明的语法:

  template <typename U>
  class MyTemplateClass<U>;

您将该语法用于友元模板专业化,因此从编译器的角度来看,您想要一个没有模板声明就无法出现的模板专业化。

这有效:

  template <typename U>
  friend class MyTemplateClass;

只能设置一定数量的模板参数,没有名称

  template <typename>
  friend class MyTemplateClass;
© www.soinside.com 2019 - 2024. All rights reserved.