Название немного неправильное, я имею в виду "C с классами".
Позвольте мне объяснить, недавно я купил книгу ShaderX7, которая поставлялась с облегченной (и старой) копией движка Unigine для одной из статей о технике теневого отображения.
Я копался в коде, когда понял, что, хотя автор использовал C ++ и наследование и все достоинства C ++, большинство, если не весь контент метода, по сути, был кодом в стиле C; например:
int Shader::get_param(const char *name,char *src,String &dest) const {
char *s = src;
int size = (int)strlen(name);
while(*s) {
if(!strncmp(s,name,size)) {
if((s == src || strchr("\n\r",*(s - 1))) && strchr(" \t",*(s + size))) {
src = s;
s += size;
dest.clear();
while(*s && strchr(" \t",*s)) s++;
while(*s && strchr(" \t\n\r",*s) == NULL) dest += *s++;
if(dest.isEmpty()) {
Log::error("Shader::get_param(): can't get \"%s\" \n",name);
return 0;
}
memmove(src,s,strlen(s) + 1);
return 1;
}
}
s++;
}
return 0;
}
Я не говорю, что это плохо, это делает работу, и вот что важно, но я больше привык к конструкциям в стиле C ++, с std :: string, векторами и т. Д. ... и я широко использую библиотеки Boost ; так что этот стиль для меня стал сюрпризом.
Действительно ли лучше / быстрее использовать этот вид кода, чем использовать общий, ОО путь?
Попал ли я в ловушку "слишком много абстракции"?
Редактировать: исправлено имя метода, чтобы было понятно, что он делает.