尝试在std::cout和std::ifstream之间切换
Trying to switch between std::cout and std::ifstream
我想读取从命令行确定的std::cin
或std::ifstream
的输入。该命令看起来像./run 1
或./run 2
。现在,我必须基于读取模式编写两个几乎相似的函数。
void read1()
{
int a, b;
while (std::cin >> a >> b) {
// do something
}
}
或
void read2()
{
int a, b;
std::ifstream fin("file.txt");
while (fin >> a >> b) {
// do something
}
}
对于大循环,很难维护这两个函数,因为循环部分是公共的,唯一的区别是输入源。
如何集成这两个功能?
std::cin
和std::ifstream
都是std::istream
,因此可以通过使用对std::istream
的引用进行操作的函数来解决此问题。这将适用于std::cin
、std::ifstream
实例和任何其他std::istream
:
void read(std::istream& input)
{
while (input >> a >> b) { .... }
}
然后切换到主叫侧。
if (something)
{
read(std::cin);
} else
{
isfream input(....);
read(input);
}
std::ifstream和std::cin都是输入流,您可以用istream作为参数来调用函数
相关文章:
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- std::atomic和std::condition_variable wait,notify_*方法之间的区别
- 如何使 std::sort 在 std::swap 和我的命名空间的模板化交换之间没有名称冲突?
- std::is_convertible 和 std::convertible_to 之间的区别(在实践中)?
- std::filesystem 和 std::experimental::filesystem 之间的路径差异
- 在什么条件下使用 std::memcpy 在对象之间复制是安全的?
- std::memmove在同一对象之间是否始终安全
- Cxx.jl 在 Julia Complex 和 std::complex 之间进行转换
- 如何在 std::string 和 Aws::String 之间进行转换?
- std::weak_ptr 和相应的 std::shared_ptr 之间是否存在数据竞争?
- std::fabs(a * b) 和 std::fabs(a) * std::fabs(b) 之间的区别
- 如何在窗口之间移动 std::unique_ptr 而不会冒内存泄漏的风险?
- 简单使用 std::atomic 在两个线程之间共享数据
- "+=" 操作在类型之间不起作用 std::复杂<double>和__complex__双精度
- "std::function<double(double)>"到"double (*)(double)"之间的转换
- malloc 和 calloc 与 std::string 之间的区别
- std::random_device和std::mt19937_64之间有什么区别
- 是std::memcpy在不同的可复制类型之间的未定义行为
- 我收到void main()和使用命名空间std;之间的冲突;?我正在使用代码块
- iostream和命名空间std之间的关系是什么?