2014-01-10 2 views
2
class A 
{ 
    float m_Period; // a1 
    float m_Scale; // a2 
}; 

я могу иметь указатель элемент данных, как это:Массив указателей на член данных

float A::*pFloat; 

Для причины членов ручки в цикле я нужен массив таких указателей. Как это сделать.

+0

Почему бы просто не сделать членами 'a1',' a2' и т. Д. В массив, 'a'? –

ответ

3

Либо std::vector<float A::*> pFloats;, либо если вам нужна статическая инициализация с компилятором, подсчитывающая количество инициализаторов, float A::*pFloat[] = {...};.

5
typedef float A::*member_t; 

Теперь вы можете объявить массив или vector из member_t.

+1

Вам не нужен typedef. (В зависимости от использования, это может сделать все более ясным, но это вызывает такие вещи, как 'typedef float * FloatPtr'. Что-то я не большой поклонник.) –

+0

Правда, и не используя typedef« smacks of »' std: : vector '. В зависимости от вашей аудитории, сложности этого типа и количества раз, когда вы повторяете тип кода, вы решаете, нужен ли вам псевдоним. –

+0

Да. Это очень важный вызов. Тот факт, что декларация не нуждается в круглых скобках, заставляет меня отказаться от использования typedef, а также тот факт, что вам нужно знать, что это указатель на члена A. Но я, вероятно, склонен использовать такой typedef намного меньше чем другие; если мне нужен такой тип, как ваш, я с большей вероятностью переписал бы код таким образом, который бы полностью избегал этого типа. –