【发布时间】:2021-12-06 21:38:14
【问题描述】:
我有这个关于类模板和朋友的例子:
template <typename T>
class Foo;
template <typename T>
std::ostream& operator<<(std::ostream&, Foo<T> const&);
template <typename T>
std::istream& operator>>(std::istream&, Foo<T>&);
template <typename T>
class Foo{
private:
int x = 10;
friend std::ostream& operator<< <T>(std::ostream&, Foo const&);
friend std::istream& operator>> <>(std::istream&, Foo&);
};
template <typename T>
std::ostream& operator<<(std::ostream& os, Foo<T> const& f){
return os << f.x;
}
template <typename T>
std::istream& operator>>(std::istream& is, Foo<T>& f){
return is >> f.x;
}
int main(){
Foo<double> fd;
std::cin >> fd;
std::cout << fd << '\n';
std::cout << '\n';
}
-
工作很好,但我想知道插入运算符
<<友谊类型和提取运算符>>友谊类型到类Foo之间的区别。 -
...operator<< <T>..用于实例化Foo的同一类型的输出运算符的每个实例化是它的朋友吗?那么这是一对一的友谊吗? -
让我困惑的是提取运算符:
operator >> <>(...:这是什么意思?这是一个完整的专业化吗?
【问题讨论】:
标签: c++ templates friend class-template