令人困惑的typedef涉及类作用域
A confusing typedef involves class scope
我正在阅读一个C++项目的代码,它包含以下形式的一些代码:
namespace ns {
class A {};
class B {};
}
struct C {
typedef ns::A* ns::B::* type;
};
有人能解释一下typedef
行的含义吗?type
似乎是指向ns::B
成员的某种指针,指向ns::A
,但我不确定。
实际代码中的A
和B
类不是空的,但我认为这与这里无关。这是一个活生生的例子。
ns::B::*
是指向B
的成员变量的指针。那么ns::A*
就是它的类型。
所以整个声明意味着
指向ns::A*
类型的B
成员变量的指针
@vsoftco的回答已经回答了问题的核心。这个答案显示了如何使用这样的typedef
。
#include <iostream>
#include <cstddef>
namespace ns {
struct A {};
struct B
{
A* a1;
A* a2;
};
}
struct C {
typedef ns::A* ns::B::*type;
};
int main()
{
C::type ptr1 = &ns::B::a1;
C::type ptr2 = &ns::B::a2;
ns::B b1;
b1.*ptr1 = new ns::A; // Samething as b1.a1 = new ns::A;
return 0;
}
相关文章:
- 未在作用域中声明unordered_map
- 有没有一种方法可以在编译时获得作用域类名
- C++quit()函数中可能存在作用域问题
- 未在此作用域OpenCV3.4中声明cvSaveImage
- 全局作用域中函数指针的赋值
- 在类函数中初始化外部作用域变量
- 不同作用域中的静态变量和全局变量
- 是同一作用域的函数部分中的函数调用
- 未在此作用域中声明的函数和变量 (C++)
- 类作用域的类型别名"using":[何时]方法中的用法可以先于类型别名?
- 将作用域枚举转换为基础类型
- 表达式必须具有完整或无作用域的枚举图
- 在构造函数中输入对象时C++类成员作用域
- 无法让"std::enable_if"适用于无作用域枚举
- 为什么不能直接引用作用域枚举类成员,而不能为无作用域枚举生成类成员?
- 函数未在作用域中声明 / 如何结合使用 header.h、header.cpp 和 main.cpp?
- 创建从外部作用域重新声明模板参数的typedef的负面影响
- 令人困惑的typedef涉及类作用域
- 在两个结构(函子)中理解typedef的作用域
- Typedef和using声明在同一作用域的相同名称