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

Accessing data members of a data member(itself is object) as if they were class members

本文关键字:数据成员 成员 一样 对象 访问      更新时间:2023-10-16

给定场景,

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;
}

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

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

operator->必须返回一个本身支持operator->的类型,例如 raw 指针适合这个:

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;
}

似乎比我想象的要容易:

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{
}