LINUX.ORG.RU

История изменений

Исправление 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() = ...;
    ...
}