C++ 像访问类成员一样访问数据成员(本身是对象)的数据成员
鉴于这种情况C++ 像访问类成员一样访问数据成员(本身是对象)的数据成员,c++,operator-overloading,overloading,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; } 模板 结构A{ 结构B{ int x; 双y; } 结构C{ 字符c;
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;
}
模板
结构A{
结构B{
int x;
双y;
}
结构C{
字符c;
std::字符串k;
}
使用type=std::conditional::type;
b型;
}
我希望访问以下成员的数据:
int main(){
A<true> object_1;
A<false> object_2;
cout << object_1.x;
cout << object_2.k;
}
intmain(){
对象_1;
对象_2;
您不能重载
,这是正确的。但是,您可以重载->
,如果这也是您的一个选项
运算符->
必须返回本身支持运算符->
的类型,例如,原始指针适合以下情况:
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; }
};
模板结构A
{
结构B
{
int x;
双y;
};
结构C
{
字符c;
std::字符串k;
};
使用type=std::conditional::type;
b型;
类型*运算符->(){return&b;}
};
您可以这样使用它:
int main()
{
A<true> object_1;
A<false> object_2;
cout << object_1->x;
cout << object_2->k;
}
intmain()
{
对象_1;
对象_2;
cout x;
库特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{
}
结构B{
int x;
双y;
}
结构C{
字符c;
std::字符串k;
}
样板
结构A:public std::conditional::type{
}
在a
中创建一个引用子对象成员的引用成员?结构b不会保持不变。它可以是另一个结构,在a中声明,并且具有不同类型的不同数量的数据成员。我将对其进行更新,使其更具体。(示例已更新)具有重载
运算符的能力将是完美的。如果解决方案增加了A
的大小,并且以这种方式使用成员的效率不如直接成员访问那么高,那么可以吗?@aschepler struct size或efficiency不是一个问题。此时我需要的是语法的简单性。->
对你不起作用吗?你用A
作为指针吗?使用
操作符会更方便。