C ++模板在运行时从配置文件中读取类型

时间:2018-03-19 16:06:48

标签: c++11

我一直在尝试编写一段在运行时读取配置文件的代码,该文件包含不同变量的名称及其类型。这些类型几乎都是内置的(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 ++脚本的可怕步骤之前,我在这里寻求帮助。

0 个答案:

没有答案