Удаление лишнего кода
Я пытаюсь сделать игру в OpenGL и хочу переместить камеру. Я сделал это с помощью этого кода:
t.calculations(&t1, 5.54, 1.54, 10, 10, 1);
t.calculations(&t2, 5.54, 1.54, 10, 10, 1);
t.calculations(&t3, 5.54, 1.54, 10, 10, 1);
t.calculations(&t4, 5.54, 1.54, 10, 10, 1);
t.calculations(&t5, 5.54, 1.54, 10, 10, 1);
t.calculations(&t6, 5.54, 1.54, 10, 10, 1);
t.calculations(&t7, 5.54, 1.54, 10, 10, 1);
t.calculations(&t8, 5.54, 1.54, 10, 10, 1);
t.calculations(&t9, 5.54, 1.54, 10, 10, 1);
t.calculations(&t10, 5.54, 1.54, 10, 10 ,1);
t.calculations(&t11, 5.54, 1.54, 10, 10, 1);
t.calculations(&t12, 5.54, 1.54, 10, 10, 1);
t.calculations(&t13, 5.54, 1.54, 10, 10, 1);
t.calculations(&t14, 5.54, 1.54, 10, 10, 1);
t.calculations(&t15, 5.54, 1.54, 10, 10, 1);
t.calculations(&t16, 5.54, 1.54, 10, 10, 1);
t.calculations(&t17, 5.54, 1.54, 10, 10, 1);
t.calculations(&t18, 5.54, 1.54, 10, 10, 1);
Но, как вы можете видеть, это выглядит как чрезмерное повторение кода. Я пытался использовать следующий метод вместо вышеуказанного метода:
for (int i = 1; i < 19; i++) {
t.calculations(&t+i, 5.54, 1.54, 10, 10, 1);
}
Но это не работает. Может кто-нибудь сказать мне альтернативное решение?
1 ответ
Решение
Предполагая, что все переменные ti имеют одинаковый тип и тип double:
// The following sentence declares an array initialized with the 18 t variables
// think of this array as a slot container of values, the following is just syntax
// to declare and initialize the array
// IMPORTANT: Once the array is initialized, you can't modify its structure, you can
// replace the content of every cell, but, you can add neither remove elements from it
double t[] = { t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18 };
// Then, you can read every cell of the array using the [] operator like this:
// (Another important hint, arrays starts from '0')
for (int 0 = 1; i < 18; i++) {
// You take the address of every ti variable stored in each "cell" of the array
t.calculations(&t[i], 5.54, 1.54, 10, 10, 1);
}
В качестве альтернативы, используя менее подробный синтаксис (но довольно сложный), приведенный выше код можно выразить так:
for (int i = 0; i < 18; i++) {
t.calculations(t + i, 5.54, 1.54, 10, 10, 1);
}
Для получения дополнительной информации, проверьте онлайн документацию и учебные пособия для массивов в c/ C++. Подобный синтаксис широко используется в других языках