【问题标题】:Array of pointers to data members指向数据成员的指针数组
【发布时间】:2014-01-10 09:57:55
【问题描述】:
class A 
{
    float m_Period; // a1
    float m_Scale;  // a2
};

我可以像这样拥有指向数据成员的指针:

float A::*pFloat;

由于循环中的句柄成员,我需要一个这样的指针数组。如何做到这一点。

【问题讨论】:

  • 为什么不直接将成员a1a2等组成一个数组a

标签: c++ arrays pointer-to-member data-members


【解决方案1】:
typedef float A::*member_t;

现在您可以声明一个数组或vector of member_t

【讨论】:

  • 你不需要 typedef。 (根据使用情况,它可能会让事情变得更清晰。但这有点像typedef float* FloatPtr 这样的东西。我不太喜欢。)
  • 是的,并且不使用 typedef “smacks of”std::vector<void(*)void (A::*)(float[12] &, int(*)(float))>。根据您的受众、类型的复杂性以及您在代码中重复该类型的次数,您可以决定是否需要为其设置别名。
  • 是的。这在很大程度上是一个判断电话。声明不需要括号这一事实使我倾向于不使用 typedef,您确实需要知道它是指向 A 成员的指针这一事实也是如此。但我可能倾向于使用这种 typedef 的次数要少得多相对于其它的;如果我需要像你这样的类型,我更有可能以完全避免该类型的方式重写代码。
【解决方案2】:

std::vector<float A::*> pFloats; 或者,如果您需要使用编译器计算初始化器数量的静态初始化,float A::*pFloat[] = {...};

【讨论】:

    猜你喜欢
    • 2023-03-27
    • 2010-10-15
    • 1970-01-01
    • 2016-07-28
    • 1970-01-01
    • 2012-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多