有没有办法让C ++中的'std :: cin'成为'scan()'函数?

时间:2017-09-08 10:32:27

标签: c++

只是想知道在C ++中是否有可能有一个函数(如scan()或其他)与std::cin语法做同样的事情?

std::cin >> data; // or
scan(data);

2 个答案:

答案 0 :(得分:6)

在C ++ 17中,您可以使用variadic templatefold expression创建一个函数,该函数接受任意数量的参数并为您生成cin >> a >> b >> c >> ...链:

template <typename... Ts>
std::istream& scan(Ts&... xs)
{
    return (std::cin >> ... >> xs);
}

用法:

int i;
double j;
scan(i);
scan(i, j);

if (scan(i, j))
   std::cout << "Read " << i << ", " << j << "\n";
else
   std::cout << "Invalid input\n";

live example on wandbox

答案 1 :(得分:1)

如果您只想创建一个为您输入的参数指定值的函数,您可以执行以下操作

void scan( std::string & input )
{
  std::string newInput;

  cin << newInput;

  input = newInput;

}


std::string myString;

scan( myString );

您将被要求输入一个字符串,然后您的输入将被分配给myString。