我一直在尝试编写一段在运行时读取配置文件的代码,该文件包含不同变量的名称及其类型。这些类型几乎都是内置的(int,unsigned int,char *,unsigned long long,float),只有一个类将信息存储为二进制标志。
示例配置文件包含:
名称std :: string Measurement
PositionX float 0.004
PositionY float 0.002
时间无符号长多1521479000
需要此信息的功能:
std::vector<float> xPos;
...
while( loops_over_a_file_containing_values );
...
xPos.push_back(get_information["PositionX"].extract<float>());
然而,我不能为我的生活找到一种方法来在C ++代码中定义这些,我的大部分谷歌搜索引导我“这不起作用”或对我来说如此复杂的答案我不能以合理的方式实现它。
这背后的主要原因是因为存在相当多的具有不同类型的变量,并且需要它们的类型,因为此函数来自另一个用户编写的C ++包(我无法以任何形状或形式进行修改) )。
到目前为止,我已经看过boost :: any,boost :: variant但我看不出如何用这些来完成。而且我不确定如何使用模板进行此操作,我尝试过:
template <int ModeDecider> class TypeDecider{ };
template <> class TypeDecider<0>{ public: typedef int Type; };
template <> class TypeDecider<1>{ public: typedef unsigned int Type; };
template <> class TypeDecider<2>{ public: typedef unsigned long long Type; };
template <> class TypeDecider<3>{ public: typedef float Type; };
...
std::string test1 = "unsigned long long";
std::string test2 = "1521479000";
switch( test1 ){
...
std::vector<TypeDecider<2>::Type> testvec;
testvec.push_back(static_cast<TypeDecider<2>::Type>(test2));
...}
但是这给了我:
cannot convert 'std::__cxx11::string' (aka 'basic_string<char>') to 'TypeDecider<2>::Type' (aka 'unsigned long long') without a conversion operator
我不确定如何修复。到目前为止,我的谷歌搜索功能已经很少了。因此,在我编写Python脚本以编写C ++脚本的可怕步骤之前,我在这里寻求帮助。