请帮助解释这些代码,也许是C ++中的'None'?
please help explain these code , maybe the 'None' in c++?
在阅读愚蠢的源代码时(https://github.com/facebook/folly/blob/master/folly/Optional.h),我在c++中找到了一个可能是"None"的语法实现,但无法理解这一点。代码如下:
namespace detail { struct NoneHelper {}; }
typedef int detail::NoneHelper::*None;
const None none = nullptr;
这些代码的作用是什么?"None"是成员函数指针吗?请帮忙,谢谢!
None是空指针。这很清楚。但是空指针也有类型。NoneHelper
是一个助手类,它除了使None
的类型唯一之外没有其他功能。
它是指向成员的指针,因为这种指针的转换有限。特别是,不能意外地将指向对象的指针强制转换为指向成员函数的指针。
None是指向整数类型成员的指针的typedef。
想象一下你有一个结构
namespace detail
{
struct NoneHelper
{
int a;
int b;
int c;
};
};
你可以说:
typedef int detail::NoneHelper* None;
const None memberA = &detail::NoneHelper::a;
这是一种用于获取指向成员值的指针的特殊语法。它可以有效地被认为是某种偏移:structNoneHelper有一个类型为integer的成员变量,位于其基指针的偏移处。
您可以使用此语法来修改该整数,而无需明确说明要修改的整数成员;例如:
void setToFive(detail::NoneHelper& object, const None ptrToMember)
{
// .* is an operator that is used to dereference pointer-to-member variables
object.*ptrToMember = 5;
}
detail::NoneHelper obj;
obj.a = 1;
obj.b = 2;
obj.c = 3;
None ptrToA = &detail::NoneHelper::a; //Acquire the relative location of member a
None ptrToB = &detail::NoneHelper::b; //Acquire the relative location of member b
setToFive(obj, ptrToA); //Sets the value of "obj.a" to 5
setToFive(obj, ptrToB); //Sets the value of "obj.b" to 5
std::cout << obj.a << obj.b << obj.c; // should print out "553"
编辑:请注意,"偏移"概念仅适用于"指向对象成员的指针"的情况。指向成员的指针语法也可以用于成员函数(int (SomeType::*)(int arg1)
),并且(希望上帝保佑)不会存储成员函数可能包含在对象中的位置的"偏移量"。
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- .cpp和.h文件中的模板专用化声明
- 反向给定链表中的K节点
- 正在查找文档以获得PS4平台的C++中的设备信息
- enum是C++中的宏变量还是整数变量
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 将字符串存储在c++中的稳定内存中
- 文本文件中的单词链表
- 递归函数计算序列中的平方和(并输出过程)
- 如何从C++中的依赖类型中获得它所依赖的类型
- C++中的"inline"关键字
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- arm-none-eabi-g++ 忽略表达式 stm32f4 中的无效字符"#"
- -l在arm none eabi gcc中的用法
- 避免 c++ none 类变量中的"already defined in ..."错误/交战
- 如何在 v8 的 none 主线程中运行 js?
- 在Tensorflow的C++ TensorShape API中,Python的None相当于什么?
- 请帮助解释这些代码,也许是C ++中的'None'?
- 如何在返回类型为.的函数中返回None