如何正确地从文件中加载完整的变量数据集的值?

时间:2019-03-30 09:48:28

标签: c++ variables loading

嗨stackoverflow社区,

我目前在代码中有一个常量数据集,该常量是从文本文件加载的。这些变量在学习算法中一直被使用,因此我将它们声明为我类的执行速度成员(以下示例为6,但我有100 +):

class learningGraphDataset
{
public:
   learningGraphDataset();
   loadDatasetValuesFromTextFile();

private:
    // DATASET
    uint32_t _CST_FACTOR_MIN1;
    uint32_t _CST_FACTOR_MIN2; 
    uint32_t _CST_FACTOR_MAX12;
    uint32_t _CST_FACTOR_MAX12;
    **
    ** (many others)
    **
    uint32_t _CST_LIMIT13;
};

我将所有值保存在一个文件中,以便能够生成一组新数据(遗传算法),并使用新的数据集文本文件重新启动软件。

问题是,当我想从文本文件中加载每个值时,我有大约800行内容:

QString cstName = tmpLineSplitted[0];
uint32_t cstVal = tmpLineSplitted[1].toUInt();
if (cstName == "CST_FACTOR_MIN1_VAL") 
{
     _CST_FACTOR_MIN1 = cstVal;
     errorOnLine=false;
     nbConstantsLoaded++;
}
else if (cstName == "CST_FACTOR_MIN2_VAL") 
{
     _CST_FACTOR_MIN2 = cstVal;
     errorOnLine=false;
     nbConstantsLoaded++;
}
**
**(many others)
**
else if (cstName == "CST_LIMIT13_VAL") 
{
     _CST_LIMIT13 = cstVal;
     errorOnLine=false;
     nbConstantsLoaded++;
}

再加上一个常数,它开始变得很慢。 我的文本文件如下所示:

CST_FACTOR_MIN1_VAL;61;
CST_FACTOR_MIN2_VAL;13;
**
**(many others)
**
CST_LIMIT13_VAL;27;

我知道在C ++中无法加载这样的变量(“反射”语言?)

variable("_CST_FACTOR_MIN1") = cstVal;

代码有效,但是有没有一种更好的方式编写所有这些代码呢?映射也许?在两列中都包含所有内容(文本文件中的变量名和真实的变量名)?如果a可以通过循环加载所有常量,这将有助于获得更清晰的代码。

我使用C ++ 11和Qt5库

非常感谢

0 个答案:

没有答案