Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;从字符串到对象标识符的转换 我正在编写一个C++程序,它从外部文件中读取一些数据,以便设置静态变量的值。_C++_String_Identifier - Fatal编程技术网

C++;从字符串到对象标识符的转换 我正在编写一个C++程序,它从外部文件中读取一些数据,以便设置静态变量的值。

C++;从字符串到对象标识符的转换 我正在编写一个C++程序,它从外部文件中读取一些数据,以便设置静态变量的值。,c++,string,identifier,C++,String,Identifier,是否可以将字符串转换为对象标识符?(例如,将字符串“CheckBox::Unchecked”转换为对象CheckBox::Unchecked的标识符)否。如果要执行此操作,您必须手动解析字符串并自行完成此工作。否,除非您在程序中定义了映射方法 但是,您可以创建一个散列并查找它。这绝对是可能的。你如何做到这一点取决于你期望的投入。例如,如果您知道您将要读取一个复选框字符串,那么为checkbox类创建一个操作符>>() std::istream& operator>>(std:

是否可以将字符串转换为对象标识符?(例如,将字符串“CheckBox::Unchecked”转换为对象CheckBox::Unchecked的标识符)

否。如果要执行此操作,您必须手动解析字符串并自行完成此工作。

否,除非您在程序中定义了映射方法


但是,您可以创建一个散列并查找它。

这绝对是可能的。你如何做到这一点取决于你期望的投入。例如,如果您知道您将要读取一个复选框字符串,那么为checkbox类创建一个
操作符>>()

std::istream& operator>>(std::istream& in, CheckBox& cb)
{
    std::string input_str;
    in >> input_str;
    if( str == "CheckBox::unchecked" ) cb.set_value(false);
    else if( str == "CheckBox::checked" ) cb.set_value(true);
    else in.setstate(ios::badbit);
    return in;
}

// ...
CheckBox b;
if( !( cin >> b) )
    // ...

如果你不知道你要读什么,那么你是在语法和解析领域。为此,必须定义语法(何时允许使用“复选框”字符串?)。一旦你把语法写下来,你就可以编写一个词法分析器和一个语法分析器。有一些工具可以做到这一点。

@Ciro:这是另一个方向。