LINUX.ORG.RU

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

Исправление alysnix, (текущая версия) :

обычно я пишу так:

если надо вызвать только раз ff()

a local_a; ///сам обьект
face_a(local_a).ff(); ///вызов функции ff

а если вызовов много

a local_a; ///сам обьект
face_a face(local_a);

face.ff()
face.fff()
face.ff()
...

вообще face содержит только ссылку на обьект, который он накрывает и адрес таблицы вирт. методов. при оптимизации кода, это скорее всего будет иметь тот же оверхед, что и случай, когда сами классы a,b,c реализуют этот интерейс. как в Java cо строковыми классами.

можно пойти еще дальше и встроить классы a, b, c внутрь реализаций интерфейса face_0, держа там не ссылку, а сам обьект, то есть расширить неродственные классы прямой настройкой реализации интерфейса face_0.

и не надо лишние методы класть в базовые классы. всегда можно делать такие вот реализации нужных интерфейсов тогда, когда некие функции реально понадобятся.

Исправление alysnix, :

обычно я пишу так:

если надо вызвать только раз ff()

a local_a; ///сам обьект
face_a(a).ff(); ///вызов функции ff

а если вызовов много

a local_a; ///сам обьект
face_a face(local_a);

face.ff()
face.fff()
face.ff()
...

вообще face содержит только ссылку на обьект, который он накрывает и адрес таблицы вирт. методов. при оптимизации кода, это скорее всего будет иметь тот же оверхед, что и случай, когда сами классы a,b,c реализуют этот интерейс. как в Java cо строковыми классами.

можно пойти еще дальше и встроить классы a, b, c внутрь реализаций интерфейса face_0, держа там не ссылку, а сам обьект, то есть расширить неродственные классы прямой настройкой реализации интерфейса face_0.

и не надо лишние методы класть в базовые классы. всегда можно делать такие вот реализации нужных интерфейсов тогда, когда некие функции реально понадобятся.

Исходная версия alysnix, :

обычно я пишу так:

если надо вызвать только раз ff()

a local_a; ///сам обьект
face_a(a).ff(); ///вызов функции ff

а если вызовов много

a local_a; ///сам обьект
face_a face(a);

face.ff()
face.fff()
face.ff()
...

вообще face содержит только ссылку на обьект, который он накрывает и адрес таблицы вирт. методов. при оптимизации кода, это скорее всего будет иметь тот же оверхед, что и случай, когда сами классы a,b,c реализуют этот интерейс. как в Java cо строковыми классами.

можно пойти еще дальше и встроить классы a, b, c внутрь реализаций интерфейса face_0, держа там не ссылку, а сам обьект, то есть расширить неродственные классы прямой настройкой реализации интерфейса face_0.

и не надо лишние методы класть в базовые классы. всегда можно делать такие вот реализации нужных интерфейсов тогда, когда некие функции реально понадобятся.