模板和字符串转换

Jos*_*cus 1 c++ string iostream

我正在创建一个计划从文件读/写的泛型类.

我不确定将实例化哪种类型.如何在读取阶段将字符串转换为某种未知类型?

IE

template<class T>
void fromString(std::string from, T to) {
    to = from; 
}
Run Code Online (Sandbox Code Playgroud)

无论如何要做到这一点而不专门为大量的课程?

小智 5

这样做的惯用方法是使用以下方法:

template<typename T>
void fromString(std::string from, T& to) {
    std::istringstream iss(from);
    iss >> to; 
}
Run Code Online (Sandbox Code Playgroud)

解析字符串输入格式的大多数可用标准专业都将由已有的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);
}
Run Code Online (Sandbox Code Playgroud)