友元声明和显式模板实例化声明
Friend declaration and explicit template instantiation declaration
假设我有一个函数模板
template <typename T>
void f(T) {}
那么,我们可以有一个友元声明
friend void f<int>(int);
和显式模板实例化声明
extern template void f<int>(int);
两个声明在某种程度上是相关的还是完全独立的?如果相关,它们是如何相互作用的?
一个friend
声明不与任何东西"交互",除了被声明为友元的函数定义,它被允许访问包含该声明的类的私有成员。
所以,不,friend
声明和extern template
声明之间没有特殊的相互作用,尽管它们都指的是同一个函数(从这个意义上说,它们是相关的,但我假设你在写问题时意识到了这一点)。
相关文章:
- 单行类声明和实例化
- 从模板基类派生是否在派生类声明的点实例化模板
- 在实例化封闭类模板之后,我们可以声明模板类成员的部分专用化吗
- 我们可以在没有新实例化的情况下声明一个抽象方法来返回抽象超类中的子类对象吗
- 在不使用默认构造函数的情况下声明 POD 结构时,会实例化什么?
- C++17 单独的显式方法模板实例化声明和定义
- 声明基类类型的指针,但随后通过指向子类来实例化它.这是良好的编程实践吗?
- 模板函数是否以内联方式声明 constexpr,即使实例化不是 constexpr
- C 在对象实例化时如何分开声明和构造函数
- 无法在好友函数中实例化类?我没有得到在范围错误中声明
- 仅标头模板(外部模板)的显式实例化声明
- 声明无法解决"实例化后的显式专用化"错误
- gcc 中的模板显式实例化(定义和声明)
- 类模板实例化错误:未在此范围内声明类型
- 未在此作用域中声明实例化类/的作用域
- 声明模板化实例对象的函数指针
- 声明与实例化
- 我应该在哪里声明一个涉及多次实例化的类的枚举类
- 继承错误 - 无法实例化抽象类 无法访问在类中声明的受保护成员
- 在模板实例化上声明外部 C 函数