Название немного неверно, я действительно имею в виду "C с классами".
Позвольте мне объяснить, недавно я купил книгу ShaderX7, которая пришла с облегченной (и старой) копией движка Unigine для одной из статей о методах теневого отображения.
Я разбирался в коде, когда понял, что, хотя автор использовал С++ и наследование и все доброту С++, большинство, если не весь контент метода, был по существу кодом стиля 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;
}
Я не говорю, что это плохо, это делает работу, и что важно, но я больше привык к конструкциям стиля С++, с std::string, векторами и т.д.... и я широко использую библиотеки Boost; поэтому этот стиль приносит мне немного сюрприз.
Действительно ли лучше/быстрее использовать этот тип кода, чем идти по общему пути OO?
Я попал в ловушку "слишком большой абстракции"?
Изменить: исправить имя метода, чтобы он дал понять, что он делает.