【发布时间】:2012-11-08 00:17:59
【问题描述】:
我正在尝试了解该程序的工作原理。我是 C++ 模板的新手。 有人能解释一下为什么我们需要以下函数吗?
friend std::ostream &operator <<(std::ostream &os, const Temp &temp)
它似乎只适用于字符串模板。
另外,operator T() {return val;} 函数有什么作用?
#include <iostream>
#include<string>
template <typename T>
class Temp {
friend std::ostream &operator <<(std::ostream &os, const Temp &temp) {
os << temp.val;
return os;
}
public:
Temp(T val) : val(val) {}
operator T() {return val;}
public:
T val;
};
用法示例:
#include <iostream>
#include<string>
#include "temp2.h"
using namespace std;
int main() {
temp<int> si = 10;
cout << "si: " << si << endl;
si = si + 2;
cout << "After si = si + 2: " << si << endl;
Temp<double> si2 = 15.5;
cout << "si: " << si2 << endl;
si2 = si2 + 2.3;
cout << "After si = si + 2: " << si2 << endl;
Temp<string> ss = string("Hello");
cout << "ss: " << ss << endl;
ss = string(ss).substr(1);
cout << "After ss = si.substr(1): " << ss << endl;
return 0;
}
【问题讨论】:
-
确切的错误是什么?
-
只是试图理解程序没有错误
-
当字符串不是模板参数时它说什么,“似乎只适用于字符串模板”
-
@KarishKarish:你从哪里得到这个源代码?
-
我对@987654325@ 比较冷淡,尤其是如果 T 曾经是 CV。相反,我会使用
operator const T&() const,但每个人都有自己的。