This question already has answers here:
Access friend function defined in class
(2个答案)
3年前关闭。
这似乎可行:
http://ideone.com/lApGTi
好的,让我们做一个看似纯粹的外观更改,然后将
突然编译开始失败:
http://ideone.com/ImsQtJ
为什么需要在类外部定义模板 friend 功能才能在此代码段中工作?
有什么技巧可以在类定义的主体中定义
(2个答案)
3年前关闭。
这似乎可行:
template<class A> struct S {
template<class B> friend S<B> f(B);
};
template<class B> S<B> f(B) {return S<B>{};}
int main() {
f(5);
}
http://ideone.com/lApGTi
好的,让我们做一个看似纯粹的外观更改,然后将
f
的定义移到struct
的主体中:template<class A> struct S {
template<class B> friend S<B> f(B) {return S<B>{};}
};
int main() {
f(5);
}
突然编译开始失败:
prog.cpp: In function ‘int main()’:
prog.cpp:6:5: error: ‘f’ was not declared in this scope
f(5);
^
http://ideone.com/ImsQtJ
为什么需要在类外部定义模板 friend 功能才能在此代码段中工作?
有什么技巧可以在类定义的主体中定义
f
函数吗? 最佳答案
当您在类内部实现内联函数时,如果没有argument-dependent lookup,则在类外部看不到其声明。
仅当该类或其任何嵌套类使用friend函数时,这才有用。
常规类也存在该问题,而不仅仅是类模板。以下也是一个问题。
struct S {
friend S f(int) {return S{};}
};
int main() {
f(5);
}
关于c++ - 如果在类中定义了模板化的 friend 函数,为什么似乎没有公开? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42866338/
10-12 23:58