我需要帮助来了解以下(简化)的代码片段:

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有关语法和一些示例的更多详细信息。

09-07 00:09