我的问题是,据我所知,在将函数声明为友元之前,必须进行前向声明或定义。下面的代码是否有效?
这里的问题在于你无法前向声明静态函数
template <typename> class class1;
template <typename T>
class class2 {
...
friend void class1<T>::foo();
...
}
template <typename T>
class class1 {
...
static void foo() {}
...
}
这里的问题在于你无法前向声明静态函数
foo
。希望这些信息足以回答这个问题。我尝试了类似以下的代码,它编译并运行良好。但我想知道这是否仍然被认为是有效的,因为我还读到一些编译器可以接受友元声明而不需要先前的前向声明,尽管这取决于编译器。