gpt4 book ai didi

c++ - 什么时候使用成员变量指针

转载 作者:行者123 更新时间:2023-11-28 07:19:35 30 4
gpt4 key购买 nike

以下是使用“成员变量指针”的一些示例代码。

#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 个函数的类,这些函数做一件事取决于您正在运行的处理器(即 INTEL 与 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 *”...)虽然我猜它会使用类指针来增加安全性是个好主意。

现在,我回想起前一段时间,使用一个类,该类具有指向私有(private)变量成员的公共(public) 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_;
}
};

有了这样的类(class),你应该能够做类似的事情:

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;

这可能对某些人有用...

关于c++ - 什么时候使用成员变量指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19697442/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com