c++ - 有没有更好的方法来读入多个变量?

标签 c++

我有一个有很多字符串变量的类:

struct Person
{
    string name, dob, state, best_friend, /* etc... */;
};

而且我必须在我的 istream 运算符中执行此操作:

getline(cin, p.name);
getline(cin, p.dob);
getline(cin, p.state);
getline(cin, p.best_friend);
...

而且我必须对我拥有的所有其他成员变量一遍又一遍地执行此操作。我的问题是有没有更好的方法来做到这一点?

最佳答案

我发现以下辅助函数很有用:

static int delimiter() { static int idx(std::ios_base::xalloc()); return idx; }

template<class... Args>
std::istream& variadic_getline(std::istream& is, Args&&... args)
{
    char delim = is.iword(delimiter());
    if (!delim)
        delim = '\n';

    auto l = { 0, (std::getline(is, std::forward<Args>(args), delim), 0)... };
    (void)l;
    return is;
}

然后做:

if (variadic_getline(std::cin, p.name, p.dob, p.state, p.best_friend)) {

}

关于c++ - 有没有更好的方法来读入多个变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23618123/

相关文章:

从 GETTEXT 获取的 C++ 变量作为 mysql_query 变量

c++ - 我无法为g++打印_cplusplus宏的值201703L

c++ - 找不到v141的构建工具(Platform Toolset = 'v141')

c++ - 编译时判断对象是否有自动存储时长的方法

c++ - 面向对象编程和 OpenGL

c++ - CMake 和 Dylib : symbol definitions

C++ - 类方法更改成员变量,但不在 main 中

C++ 字母构建顺序

c++ - 仅使用 C++ 中的标准库获取以毫秒为单位的当前日期和时间

c++ - 适用于 Windows 的 riscv-gcc