C++ 将字符串转换为 typedef 或 istream 重载

标签 c++ class templates typedef operator-keyword

我有一个类模板,除其他事项外,它应该重载 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/

相关文章:

c++ - 提升 asio 优先级队列,从处理程序添加异步操作

c++ - 如何为所有非空变量调用方法

c++ - PRNG MTRand mt.seed() 未按预期工作(?)

python - Jinja2 中是否可以根据子属性对对象列表进行排序?

c++ - 为什么 "virtuality"方法在 C++ 中隐式传播?

c++ - 媒体基金会 : Getting a MediaSink from a SinkWriter

java - for 循环在已编译的类文件中转换为 do while 循环

C++ : pointer in vector and class inheritance

Python:如何为子类中的属性设置默认值

c++ - 传递给 std::variant 的预定义类型列表