以下代码应该是不言自明的。关于使用的语法(这是必须使用的语法),我有两个问题。如果您能为我提供这些问题的答案,我将永远感激不尽。
template <typename T>
struct A {
template <typename S>
void f (const A<S> &s);
template <typename S>
friend struct A;
// Question 1: why isn't the syntax 'friend struct A<S>' ?
// The semantic would stay, since we would like A<S> (for ANY S) to be friend of every A<T>..
private:
void g () const {}
};
template <typename T>
template <typename S> // Question 2: Why can't the syntax be 'template <typename T, typename S>' ?
void A<T>::f (const A<S> &s) {
s.g();
}
int main () {
A<bool> abool;
A<char> achar;
abool.f(achar);
}
我已经证实这确实是唯一正确的语法(我很高兴发现我弄错了)。我的问题更多是关于语法背后的推理,如问题正文中所述。
谢谢你的帮助。