【发布时间】:2018-07-05 04:47:23
【问题描述】:
我正在创建一个计划从文件读取/写入的通用类。
Ergo 我不确定将实例化什么类型。 如何在读取阶段将字符串转换为某种未知类型?
浏览器
template<class T>
void fromString(std::string from, T to) {
to = from;
}
在不专攻大量课程的情况下,无论如何要做到这一点?
【问题讨论】:
我正在创建一个计划从文件读取/写入的通用类。
Ergo 我不确定将实例化什么类型。 如何在读取阶段将字符串转换为某种未知类型?
浏览器
template<class T>
void fromString(std::string from, T to) {
to = from;
}
在不专攻大量课程的情况下,无论如何要做到这一点?
【问题讨论】:
这样做的惯用方法是使用这样的东西:
template<typename T>
void fromString(std::string from, T& to) {
std::istringstream iss(from);
iss >> to;
}
大多数用于解析字符串输入格式的可用标准特化将被现有的std::istream& operator>>(std::istream&, T&); 特化覆盖。
在不专攻大量课程的情况下,无论如何要做到这一点?
不,您仍然需要对各种课程进行专业化,例如
class Foo {
private:
int x;
double y;
public:
std::istream& getFromStream(std::istream& input) {
input >> x;
input >> y;
return input;
}
};
std:istream& operator>>(std::istream& is, Foo& subject) {
return subject.getFromStream(is);
}
【讨论】:
T并定义了自己的operator>>的用户定义类型