
Сообщение от
Vitamin
Пример дашь?
Навскидку
Код:
public Base
{
virtual int GetSomething1() = 0;
virtual int GetSomething2() = 0;
virtual int GetSomething3() = 0;
virtual int GetSomething4() = 0;
void DoJob() { print((GetSomething1()+GetSomething2()+GetSomething3()+GetSomething4()) * 57.2418); }
}
public Child : Base
{
int GetSomething1() { return 90; }
int GetSomething2() { return 5; }
int GetSomething3() { return 17; }
int GetSomething4() { return 9; }
}
переписывается в идеологии статьи как
Код:
typedef int (*get_something)();
public Base
{
void DoJob(get_something param1, get_something param2, get_something param3, get_something param4)
{
print((param1() + param2() + param3() + param4()) * 57.2418);
}
}
public Child
{
Base* base;
Child(Base* base) { this.base = base; }
void DoJob() { base->DoJob(GetSomething1, GetSomething2, GetSomething3, GetSomething4) };
int GetSomething1() { return 90; }
int GetSomething2() { return 5; }
int GetSomething3() { return 17; }
int GetSomething4() { return 9; }
}
Я, наверное, слишком привередлив, но мне кажется, что это хрень какая-то. Если бы я хотел передавать в функцию указатель на каждую требующуюся ей функцию, я бы писал на хаскелле. И это ещё методы примитивные, с 0 параметров! Даже на си с его полиморфизмом через структуры указателей это всё было бы в разы лаконичней.
Потому статья и тянет скорее на теоретические измышления, чем на практическую ценность.