何时使用成员变量指针
When to use member variable pointer
下面是一些使用"成员变量指针"的示例代码。
#include <iostream>
using namespace std;
struct CData {
int m_x;
int m_y;
};
int main() {
CData obj = {10, 20};
int CData::*pData = &CData::m_x;
cout << obj.*pData << endl;
return 0;
}
http://ideone.com/hJyWP9
从这个例子中,我不确定何时应该使用成员变量指针。
你能告诉我一些使用成员变量指针的好处或示例吗?
我认为这对于函数而不是变量成员更有用,但相同的原则适用于两者。
假设我有一个包含 3 个函数的类,这些函数执行一件事,这取决于您运行的处理器(即英特尔与 AMD,或支持 SSE4 的处理器与仅具有 SSE2 的旧进程......
void renderCPU();
void renderSSE2();
void renderSSE3();
void renderSSE4();
然后,您将获取其中一个函数的指针并使用该指针,而不是在每次要渲染时测试您是否具有 SSE4、SSE3、SSE2 或 CPU。
// in constructor
if (SSE4) render_ptr = &C::renderSSE4;
else if (SSE3) render_ptr = &C::renderSSE3;
else if (SSE2) render_ptr = &C::renderSSE2;
else render_ptr = &C::renderCPU;
// And in the render function:
this->*render_ptr();
对于变量成员,可能会发生类似的事情,尽管坦率地说,我从未将其用于变量,可能是因为您也可以使用直指针(即示例中的"int *"......虽然我想使用类指针来增加安全性是个好主意。
现在,我记得不久前,使用一个带有公共 const 引用指针的类指向私有变量成员。实际上,它为用户提供了一个getter(),而不必实际调用函数。该技术的一个问题是引用被锁定在构造上。
class P
{
private:
int v_;
public:
const int& value;
p()
: value(v_) // locked...
{
}
};
类变量指针允许您在使用对象时更改指针。
class P
{
private:
int x_;
int y_;
int z_;
public:
const int P::*ref;
p()
: ref(&P::x_) // not locked...
{
}
void modeX()
{
ref = &P::x_;
}
void modeY()
{
ref = &P::y_;
}
void modeZ()
{
ref = &P::z_;
}
};
有了这样的类,你应该能够做这样的事情:
P p;
cout << p.*p.ref; // write x_
p.modeZ();
cout << p.*p.ref; // write z_
这使得"价值"非常安全,而不是裸露的指针。
另请注意,这使您能够编写以下内容:
P p, q;
p.*q.ref = q.*p.ref;
这可能对某些人有用...
相关文章:
- 指针变量在 cout 函数中不起作用
- 如何将指针变量作为引用参数传递?
- 有没有办法在同名类 (c++) 中为对象分配一个指针变量
- 我试图了解在异或操作后指针变量正在更改
- 调用带有指针对象错误的指针变量
- 如何在 cuda 中将结构的指针变量从主机复制到设备
- 非指针变量和类成员上的新放置
- 线路抑制状态错误 C4703 可能未初始化的局部指针变量"back"已使用
- 全局外部指针变量在 DLL 中不可见
- 如何访问在 c++ 中在类内声明的结构类型指针变量?
- C++ 中指针变量的内存释放
- 使用指针变量打印特定的数组变量
- 如何使用构造函数初始化内存地址(指针变量)?
- 如何释放为指针变量本身提供的内存?
- 如果地址已知,如何获取指针变量的名称
- 如何处理参数中的基类和指针变量
- 指针变量 在数组中定位零
- 隐式指针变量,在自动定义中具有另一个指针变量
- 为什么可以将Char指针变量初始化为字符串,而INT指针变量不能初始化到整数数组
- 错误 C4703 可能未初始化的局部指针变量'y'使用