2014-10-11 3 views
0

Я хочу изменить определенный объект-член массива объектов. Поэтому я намерен передать элемент объекта в метод, который будет перебирать массив и изменить указанный элемент для каждого объекта:Изменение конкретного объекта объекта из массива объектов путем передачи

Object *objs[10]; 
if (condition) 
    modify_all(objs, Object.x, set_value); 

Но я не могу передать Object.x подобные. Есть ли лучший способ сделать это? Мне нужно что-то вроде этого, так как modfiy_all не знает, какой член изменить.

EDIT: Я просто пытаюсь реорганизовать повторяющиеся итерации массива.

+0

Возможно, вы сможете использовать шаблоны для этого, см. Например [этот вопрос] (http://stackoverflow.com/q/672843/33499) – wimh

+0

Это звучит немного сложно, но я собираюсь дать ему попробуйте. Благодаря! – lamino

+0

Да, это сложно, но то, что вы пытаетесь сделать, немного странно. Вероятно, проще вообще не использовать какую-либо функцию, а просто цикл juse a for. Если вы используете C++ 11, вы можете использовать обратный вызов с лямбда-функцией в качестве альтернативы. – wimh

ответ

0

Вы можете передать символ или int вместо члена объекта, и эта строка или int укажет, какой член должен быть изменен. Например:

Object *objs[10]; 
if (condition) 
    modify_all(objs, "x", set_value); 

или

Object *objs[10]; 
if (condition) 
    modify_all(objs, 0, set_value); 

Внутри modify_all вы можете использовать переключатель заявление на основе этого параметра посланного.

+0

Да, я думал об этом. Тем не менее, у меня около 12 членов объекта, и это путает их сочетания с целыми числами или символами. – lamino

+0

Вы можете использовать ENUM, чтобы лучше идентифицировать их и не путать –

+0

Вам необходимо предоставить сопоставление между переменными-членами и значениями параметров. –

Смежные вопросы