Исправление BreadFan, (текущая версия) :
В С инкапсуляция возможна только через void*, а компилятор плохо умеет проверку типов, если (почти) все типы - void*. на первый взгляд это и не проблема вроде, но даже в небольшом проекте на С, в котором я участвовал, это быстро начало превращаться в кошмар.
ну и статического полиморфизма очень не хватает там, да. например, вот такой код на С плохо пишется:
class A{...};
void validateHeader(const A& a);
class B{...};
void validateHeader(const B& b);
template<typename Obj>
void validate(const Obj& obj) {
validateHeader(obj);
// common fields
obj.getF1() == ...;
...
}
Исходная версия BreadFan, :
В С инкапсуляция возможна только через void*, а компилятор плохо умеет проверку типов, если (почти) все типы - void*. на первый взгляд это и не проблема вроде, но даже в небольшом проекте на С, в котором я участвовал, это быстро начало превращаться в кошмар.
ну и статического полиморфизма очень не хватает там, да. например, вот такой код на С плохо пишется:
class A{...};
void validateHeader(const A& a);
class B{...};
void validateHeader(const B& b);
template<typename Obj>
void validate(const Obj& obj) {
validateHeader(obj);
// common fields
obj.getF1() = ...;
...
}