использование глобальной структуры против вызывающих методов (указатель на эту структуру)

0

Ex. У меня есть функция, которая изменяет данные пикселя (красный, зеленый, синий), который не имеет параметров и использует глобальную структуру, glob. Я хотел бы получить доступ к glob.data для чтения красных, зеленых, синих пикселей.

В чем разница, если бы я включил параметр, который был бы glob*, я мог бы получить доступ к данным из указателя.

Является ли это лучшей практикой, чем использование глобальной функции из любой функции?

Эта реализация будет лучше, чем вызов "glob.width = 2" и т.д.

RevolverFilter(&global, &temp);
void RevolverFilter(glob* org,glob* temp1){ 
for x: for y: tRed = org->data[x+y*w].r;
    ...
}
Теги:
pointers
global-variables

2 ответа

3

"Это лучшая практика, а затем использование глобальной функции из любой функции?"

Использование глобальных переменных в качестве альтернативы для передачи параметра функции не является хорошей практикой.

Если вы хотите создать функцию, которая будет обрабатывать (изменять) пиксель, тогда определите функцию, обрабатывающую пиксель

void processPixel(Pixel& p) {
    ...
}
0

Инкапсуляция данных и функциональности в объекты является основой в объектно-ориентированном дизайне. Поэтому использование глобального для передачи значений функции не является "хорошей" практикой OOD и, как правило, не является хорошей практикой даже для конструкций, отличных от OOD, в таких структурных языках, как C, поскольку это наносит ущерб модульности компонентов кода, и создает "скрытые" зависимости в коде. Если вам абсолютно нужна какая-то "глобальная" подобная функциональность, вы можете объявить статический член в классе, сделав его уникальным, но сохраняя его инкапсулированным в один компонент (класс).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню