ブースト融合と列挙を使用したアプローチを維持しました。
enum ActivitySchemaEnum
{
DEFINITION,
NAME,
STATE,
START,
END
};
template <ActivitySchemaEnum ACTSCHEMA_V>
struct Field;
typedef boost::fusion::map<
boost::fusion::pair<Field<DEFINITION>, char const*>,
boost::fusion::pair<Field<NAME>, char const*>,
boost::fusion::pair<Field<STATE>, char const*>,
boost::fusion::pair<Field<START>, char const*>,
boost::fusion::pair<Field<END>, char const*>
> actinst_schema;
actinst_schema const ActivitySchema(
boost::fusion::make_pair<Field<DEFINITION> >("definition"),
boost::fusion::make_pair<Field<NAME> >("name"),
boost::fusion::make_pair<Field<STATE> >("state"),
boost::fusion::make_pair<Field<START> >("start"),
boost::fusion::make_pair<Field<END> >("end")
);
次に、クライアント コードで次のような呼び出しを行います (単純な呼び出しですが、アイデアはわかります)。
const char* myFieldName = boost::fusion::at_key<Field<DEFINITION> >(ActivitySchema);
クライアントの使用法は少し冗長ですが、実際には、あなたがしていることをかなり自己記述していると思います.