template<typename T>
struct xml_printer {
xml_printer( const T& c ):self(c){}
template<typename Type>
static xml_printer<Type> make( const Type& t ) {
return xml_printer<Type>(t);
}
template<typename Member, typename Class, Member Class::*p>
void operator()( const char* name )const {
std::cerr<<"<"<<name<<">"<<(self.*p)<<"</"<<name<<">\n";
}
const T& self;
};
我感到困惑的部分是operator()
访问者中的声明:
template<typename Member, typename Class, Member Class::*p>
void operator()( const char* name )const
特别是Member Class::*p
部分。如果我理解正确,这个类型参数是为了让访问者能够解析成员,这是图书馆以某种方式为成员存储的类型信息。但是,对我来说,这两种类型的写法看起来很不寻常。您能否向我解释一下这是如何工作的,或者提供一个示例来调用具有此类声明的函数?