如何使用字符串作为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}’)

我想知道,如果这甚至有可能。任何提示将不胜感激。提前致谢。

+0

您将'variable'声明为ifstream。你可能是想把它变成一个“串”。 – xslr

+0

是的,这是正确的。但即使我将它声明为一个字符串,如何将其转换为ifstream variablename? –

+1

你不能。变量名称是编译时结构。它们不能由运行时值确定。你为什么想这样做?你认为它会帮助你实现什么? –

您正在尝试创建对象,它们的名称基于输入文件的内容。这对于纯粹的C++来说是不可能的,因为在编译时必须知道对象名称。

一种替代方法是在“变量名”和文件名作为字符串来读取,它们存储在地图并通过地图迭代。

如果你绝对必须创建该文件的内容的变量名,您将需要为使用解析文本文件,并生成包含正确的变量名对应的C++代码的外部预处理器。

+0

非常感谢。我会尝试,并将编辑帖子的答案。 –

是,能够从一个(文件)流中提取的字符串。你的问题,因为错误更专业术语解释,就是variableifstream,你不能从一个流中提取的ifstream。只需将variable的类型更改为std::string即可。

现在,你有一个字符串的文件名,你可以流的文件:

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

然后你可以去和流文件的内容,并可能将其存储在std::map使用variable作为关键字 - 或者您想要对变量进行的任何操作。