我有一个带有一组输入和一组输出变量的程序,我使用 XML 与 Apache/PHP 网页进行交换。该网页是用户可以查看配置/正在进行的内容并可以更改设置的地方。
当我将 XML 传递给 PHP 程序(我们使用 Unix_domain Sockets)时,我添加了很多关于我传递给他的设置和指标的元信息。数据类型、最小值、最大值、默认值、读/写权限等。
<temperature datatype="INT32" min=-"40" max="150" permissions="R/O">25</temperature>
在构建出站 xml 时,我需要了解有关每个变量的元数据。我虽然这样做的一个好方法是创建一个类 VarInfo ,我将其与每个变量相关联。将变量名存储为映射中的键(不确定我是否总是可以知道变量名)我想将键作为指向变量的指针,将值作为指向该变量的 VarInfo 对象的指针。我知道存储混合指针类型的唯一方法是将它们全部转换为 void*。所以,像:
bool cmpr( void* a, void*b) { return (long)a < (long)b;};
std::map<void*,VarInfo*,cmpr> VarMap;
int temperature;
VarInfo vi_temperature;
VarMap[(void*)&temperature] = &vi_temperature;
这样做会产生一堆关于声明地图的错误。
expected a type, got ‘cmpr’ ACT_iod.cpp
Invalid template arguments ACT_iod.cpp line 40 Semantic Error
invalid type in declaration before ‘;’ token
type/value mismatch at argument 3 in template parameter list for
‘template<class _Key, class _Tp, class _Compare, class _Alloc> class std::map’
那么,有人可以建议我如何让这个工作,并且可能还建议一种更好的方式来存储元信息?还在考虑改用std::string's作为key。
谢谢。