我有一个有很多字符串变量的类:
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/