gpt4 book ai didi

c++ - 这个 C++ 模板成员函数声明是如何工作的?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:48:08 26 4
gpt4 key购买 nike

这是来自 documentation of the Boost.Reflect library 的片段:

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 部分。如果我理解正确的话,这个类型参数是为了让访问者能够解析成员,这是图书馆以某种方式为成员存储的类型信息。然而,这两种类型的代码在我看来很不寻常。您能否向我解释一下这是如何工作的,或者提供一个示例来调用带有此类声明的函数?

最佳答案

Member Class::*p 它是指向类型为MemberClass 成员的指针。所以,像这样的事情会说这是真的

auto printer = xml_printer<T>();
printer.template operator()<int, T, &T::x>("x");

其中 x 是类型为 T 且类型为 int 的成员变量。

来自您链接的文档

#define BOOST_REFLECT_VISIT_MEMBER( r, visitor, elem ) \
visitor.template operator()
<BOOST_TYPEOF(type::elem),type,&type::elem>( BOOST_PP_STRINGIZE(elem) );

关于c++ - 这个 C++ 模板成员函数声明是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19447510/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com