如何在C ++中将字符串用作ifstream变量名

时间:2017-05-09 07:29:21

标签: c++

我有一个带有以下条目的文本文件variables_n_paths.txt:

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;
}

这是我得到的错误:

  

错误:'operator&gt;&gt;'的模糊重载(操作数类型为'std :: ifstream {aka std :: basic_ifstream}'和'std :: ifstream {aka std :: basic_ifstream}')

我想知道这是否可能。任何提示将不胜感激。提前谢谢。

2 个答案:

答案 0 :(得分:0)

您正在尝试创建名称基于输入文件内容的对象。使用纯c ++是不可能的,因为在编译时必须知道对象名称。

另一种方法是将“变量名称”和文件名作为字符串读入,将它们存储在地图中并迭代地图。

如果绝对必须从文件内容创建变量名,则需要使用外部预处理器来解析文本文件并生成包含正确变量名的相应c ++代码。

答案 1 :(得分:0)

是的,可以从(文件)流中提取字符串。正如错误在更多技术术语中解释的那样,您的问题是variableifstream,您无法从流中提取ifstream。只需将variable的类型更改为std::string,然后提取即可。

现在您已在字符串中输入文件名,您可以流式传输文件:

std::string variable, path;
while(true) {
    readfile >> variable >> path;
    std::ifstream foo(path);

然后,您可以继续传输该文件的内容,并将其存储在使用std::map作为键的variable中 - 或者您希望对变量做什么。