我有一个类模板,除其他事项外,它应该重载 istream,以便它接受用户的输入并将其添加(插入)到一个包含类型 T 元素的 vector 中。
friend istream &operator>> (istream &in, Set<T> &s)
{
int ctr = 0;
string tmp;
T val;
while (true) {
cout << "\tElement #" << ctr + 1 << ": ";
getline (in, tmp);
if (tmp == "\0") break;
// MISSING CODE HERE: "Convert" tmp into val
s.add(val);
ctr = s.size();
}
return in;
}
这适用于 Set<string>
,但我也需要找到一种方法使其适用于任何原始数据类型,即 Set<integer>
,例如。
我试过
stringstream(tmp) >> val
但这不适用于 Set<string>
.
我想输入需要作为字符串读入;那么,如何将输入字符串转换为 T 类型以将其传递给 .add() 函数?
最佳答案
如果不是字符串,您可以使用 stringstream
对象(从 tmp
创建)提取正确的值。请注意,如果您需要的不仅仅是内置类型(例如 int
)
或者,您可以为遇到的每个 T
定义一个 convert()
函数的重载,以提供从字符串 tmp
到所需的类型。将根据您的模板参数选择适当的重载(如果存在)。
关于C++ 将字符串转换为 typedef 或 istream 重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10640358/