友元声明和显式模板实例化声明

Friend declaration and explicit template instantiation declaration

本文关键字:声明 实例化 友元      更新时间:2023-10-16

假设我有一个函数模板

template <typename T>
void f(T) {}

那么,我们可以有一个友元声明

friend void f<int>(int);

和显式模板实例化声明

extern template void f<int>(int);

两个声明在某种程度上是相关的还是完全独立的?如果相关,它们是如何相互作用的?

一个friend声明不与任何东西"交互",除了被声明为友元的函数定义,它被允许访问包含该声明的类的私有成员。

所以,不,friend声明和extern template声明之间没有特殊的相互作用,尽管它们都指的是同一个函数(从这个意义上说,它们是相关的,但我假设你在写问题时意识到了这一点)。