我需要帮助来了解以下(简化)的代码片段:
template < typename R >
struct Variable
{
typedef VariableBaseTable< R > BaseType;
typedef R BaseType::* VarType; //!
template < typename Type >
R & operator()(Type * obj) const
{
return (reinterpret_cast< ObjType >(obj))->*(_variable); //!
}
// more stuff follows
}
我需要帮助理解的两行最后用
//!
标记。我不明白
R BaseType::*
定义了什么。特别是::*
语法如何工作。在第二行中,我无法理解
obj->*(_var)
语法,可以看到obj被取消引用了,但是*
在那之后在做什么呢? 最佳答案
typedef R BaseType::* VarType;
是一个类型别名,它将
VarType
定义为指向BaseType
类型的R
成员的指针。在第二行中,您正在通过pointer-to-member access operator _variable
访问->*
字段,请参见例如this有关语法和一些示例的更多详细信息。