XML を使用して Apache/PHP Web ページと交換する一連の入力変数と一連の出力変数を持つプログラムがあります。Web ページは、ユーザーが構成/進行中の内容を確認したり、設定を変更したりできる場所です。
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 に変更することをまだ考えています。
ありがとう。