如何使用字符串作为C++ ifstream的变量名
我有这些条目一个文本文件variables_n_paths.txt:如何使用字符串作为C++ ifstream的变量名
nsf_ttj somepath1.txt
nsf_zz somepath2.txt
hsf_ttw somepath3.txt
hsf_wz somepath4.txt
我要的是这样的事情(使用循环):
ifstream nsf_ttj(somepath1.c_str());
ifstream nsf_zz(somepath2.c_str());
ifstream hsf_ttw(somepath3.c_str());
ifstream hsf_wz(somepath4.c_str());
我做上面实现的是:
#include<iostream>
#include<fstream>
using namespace std;
int main(){
ifstream variable;
string path;
ifstream readfile("variables_n_paths.txt");
while(true){
if(readfile.eof()) break;
readfile >> variable >> path; //it gives error here
}
return 0;
}
这是我收到的错误:
error: ambiguous overload for ‘operator>>’ (operand types are ‘std::ifstream {aka std::basic_ifstream}’ and ‘std::ifstream {aka std::basic_ifstream}’)
我想知道,如果这甚至有可能。任何提示将不胜感激。提前致谢。
您正在尝试创建对象,它们的名称基于输入文件的内容。这对于纯粹的C++来说是不可能的,因为在编译时必须知道对象名称。
一种替代方法是在“变量名”和文件名作为字符串来读取,它们存储在地图并通过地图迭代。
如果你绝对必须创建该文件的内容的变量名,您将需要为使用解析文本文件,并生成包含正确的变量名对应的C++代码的外部预处理器。
非常感谢。我会尝试,并将编辑帖子的答案。 –
是,能够从一个(文件)流中提取的字符串。你的问题,因为错误更专业术语解释,就是variable
是ifstream
,你不能从一个流中提取的ifstream
。只需将variable
的类型更改为std::string
即可。
现在,你有一个字符串的文件名,你可以流的文件:
std::string variable, path;
while(true) {
readfile >> variable >> path;
std::ifstream foo(path);
然后你可以去和流文件的内容,并可能将其存储在std::map
使用variable
作为关键字 - 或者您想要对变量进行的任何操作。
您将'variable'声明为ifstream。你可能是想把它变成一个“串”。 – xslr
是的,这是正确的。但即使我将它声明为一个字符串,如何将其转换为ifstream variablename? –
你不能。变量名称是编译时结构。它们不能由运行时值确定。你为什么想这样做?你认为它会帮助你实现什么? –