下面是從documentation of the Boost.Reflect library片段:這個C++模板成員函數聲明是如何工作的?
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
部分。如果我理解正確,這個類型參數是爲了讓訪問者能夠解析成員,並且這是圖書館以某種方式爲成員存儲的類型信息。然而,對於我來說,看起來很不尋常,有兩種類型的文字。你能向我解釋這是如何工作的,或者可能提供一個可以用這種聲明調用函數的例子嗎?