像访问类成员一样访问数据成员的数据成员(本身就是对象)

时间:2018-10-10 21:39:01

标签: c++ operator-overloading overloading

给出场景,

template <bool T>
struct A{
    struct B{
       int x; 
       double y;
    }
    struct C{
       char c;
       std::string k;
    }
 using type = std::conditional<T, B, C>::type;
 type b;
}

我想访问数据成员,例如:

int main(){
    A<true> object_1;
    A<false> object_2;
    cout << object_1.x;
    cout << object_2.k;
}

如果.(点)运算符可以重载,则有可能。但是,这是不可能的(至少现在是这样)。有没有解决方法可以使示例工作?

2 个答案:

答案 0 :(得分:1)

您不能超载.,这是正确的。但是,如果这也是您的选择,则可以重载->

operator->必须返回本身支持operator->的类型,例如原始指针适合这样:

template <bool T> struct A
{
    struct B
    {
        int x; 
        double y; 
    }; 
    struct C
    { 
        char c; 
        std::string k;
    };
    using type = std::conditional<T, B, C>::type;
    type b;

    type* operator->() { return &b; }
};

您可以像这样使用它:

int main()
{ 
    A<true> object_1; 
    A<false> object_2; 
    cout << object_1->x; 
    cout << object_2->k;
}

答案 1 :(得分:0)

似乎比我想象的要容易:

struct B{
    int x; 
    double y;
}
struct C{
   char c;
   std::string k;
}
template <bool T>
struct A : public std::conditional <T, B, C>::type{

}