【问题标题】:Templates and string conversion模板和字符串转换
【发布时间】:2018-07-05 04:47:23
【问题描述】:

我正在创建一个计划从文件读取/写入的通用类。

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

浏览器

template<class T>
void fromString(std::string from, T to) {
    to = from; 
}

在不专攻大量课程的情况下,无论如何要做到这一点?

【问题讨论】:

    标签: c++ string iostream


    【解决方案1】:

    这样做的惯用方法是使用这样的东西:

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

    大多数用于解析字符串输入格式的可用标准特化将被现有的std::istream&amp; operator&gt;&gt;(std::istream&amp;, T&amp;); 特化覆盖。


    在不专攻大量课程的情况下,无论如何要做到这一点?

    不,您仍然需要对各种课程进行专业化,例如

    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&gt;&gt;的用户定义类型
    • 当然@Remy,当然! (OT 你就像出现在我视野中的冰山 ;-) ...)
    • @RemyLebeau 课程控制建议我采取不同的路线
    • 可靠的答案,会让这个开放时间更长一点,但很可能会选择你最好的(:
    • @Joseph THX,但我很确定我们有这个骗局。仍在搜索,所以不要怀疑 ;-) ...
    猜你喜欢
    • 2015-05-24
    • 2015-03-02
    • 1970-01-01
    相关资源
    最近更新 更多