4
我正在重構一個打字系統(類型模型)我已經在使用精靈進行字符串序列化了。我正在使用類型特徵的編譯時建模結構。助推精神:內置終端應使用什麼類型的名稱?
template<>
type_traits<int4_type>
{
typedef boost::spirit::qi::int_parser<boost::int32_t> string_parser;
}
template<>
type_traits<string_type>
{
typedef boost::spirit::ascii::string string_parser;
}
在這個例子中,我展示了基本的解析器,但我希望也放入規則。
的int4工作,但就是因爲(住宅/氣/數字/ int.hpp +27):
namespace tag
{
template <typename T, unsigned Radix, unsigned MinDigits
, int MaxDigits>
struct int_parser {};
}
namespace qi
{
///////////////////////////////////////////////////////////////////////
// This one is the class that the user can instantiate directly in
// order to create a customized int parser
template <typename T = int, unsigned Radix = 10, unsigned MinDigits = 1
, int MaxDigits = -1>
struct int_parser
: spirit::terminal<tag::int_parser<T, Radix, MinDigits, MaxDigits> >
{};
}
字符串類型定義無法正常工作,而且也不EPS。我無法弄清楚爲什麼要引用字符串解析器。然而,在EPS的情況下,它可以歸結爲:
#define BOOST_SPIRIT_TERMINAL(name) \
namespace tag { struct name {}; } \
typedef boost::proto::terminal<tag::name>::type name##_type; \
name##_type const name = {{}}; \
inline void silence_unused_warnings__##name() { (void) name; } \
/***/
這意味着我不能的typedef,它是一種原終端結構,或將不透明,一個const全局定義。
我的問題:我如何typedef規則,語法,原語解析器?
注:我已經開始致力於給我所有的「類型」一個函數封裝一個規則,然後將其作爲一個類型特徵。