访问数据成员(本身是对象)的数据成员,就好像它们是类成员一样
Accessing data members of a data member(itself is object) as if they were class members
给定场景,
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{
}
相关文章:
- 用于访问容器<T>数据成员的正确 API
- 嵌套在类中时无法设置成员数据
- 指向(数据)成员的指针作为非类型模板参数,例如具有自动存储持续时间/无链接
- 重载具有 2 个相同数据类型成员的构造函数
- 是否允许在作为静态数据结构成员的lambda函数中捕获变量
- 当课程成员成员时,为什么参考会占据内存
- 使用各种数据类型成员创建对象的简便方法
- 如何访问模板参数的成员?“成员访问不完整的类型”
- 指向数据结构成员的指针
- 在静态LIB和DLL中使用静态成员 - 成员值正在重置
- 从原始数据填充成员的正确方法是什么
- 将'std::cin'与数据结构成员结合使用
- C++ 指向成员成员的指针
- 使用在组合类中计算的数据构造成员类
- 错误:请求"cur"中的成员"成员",该成员属于非类类型节点<int>* 二叉树
- 为什么当我尝试访问 CvMat 数据结构成员的第一个元素时,我会得到这个 ^@
- 如何通过其偏移量访问私有数据私有成员
- 即使删除了调用它的对象,也能访问数据的c++成员函数
- 获取成员成员指针指向的类型
- 引用数据类成员访问模式