Сообщение Re: как сократить количество vtbl от 22.04.2017 22:25
Изменено 22.04.2017 22:35 andrey.desman
Re: как сократить количество vtbl
Здравствуйте, qaz77, Вы писали:
Q>Класс выглядит следующим образом:
Q>
Q>Есть ли какой-нибудь паттерн/хак, чтобы "упаковать" несколько виртуальных таблиц в одну.
Есть такой хак, но насколько он применим в твоем случае тебе лучше знать. А хак прост как топор:
Нормальный компилятор в этом случае должен сделать только лишь один указатель на ТВМ класса.
Q>Класс выглядит следующим образом:
Q>
Q>class Bar: public IBar1,
Q> public IBar2,
Q> ...
Q> public IBar9
Q>{
Q> int ref_count;
Q> unsigned flags;
Q> ...
Q> // реализация IBar1
Q> virtual void foo1() override;
Q> ...
Q>};
Q>
Q>Есть ли какой-нибудь паттерн/хак, чтобы "упаковать" несколько виртуальных таблиц в одну.
Есть такой хак, но насколько он применим в твоем случае тебе лучше знать. А хак прост как топор:
class IBar1 {};
class IBar2: public IBar1 {}
class IBar3: public IBar2 {}
...
class Bar: public IBarN
{
Impl;
}
...
PROFIT
Нормальный компилятор в этом случае должен сделать только лишь один указатель на ТВМ класса.
Re: как сократить количество vtbl
Здравствуйте, qaz77, Вы писали:
Q>Класс выглядит следующим образом:
Q>
Q>Есть ли какой-нибудь паттерн/хак, чтобы "упаковать" несколько виртуальных таблиц в одну.
Есть такой хак, но насколько он применим в твоем случае тебе лучше знать. А хак прост как топор:
Нормальный компилятор в этом случае должен сделать только лишь один указатель на ТВМ класса.
Хотя тут private/protected наследование может быть лучше, но это от ситуации зависит.
Q>Класс выглядит следующим образом:
Q>
Q>class Bar: public IBar1,
Q> public IBar2,
Q> ...
Q> public IBar9
Q>{
Q> int ref_count;
Q> unsigned flags;
Q> ...
Q> // реализация IBar1
Q> virtual void foo1() override;
Q> ...
Q>};
Q>
Q>Есть ли какой-нибудь паттерн/хак, чтобы "упаковать" несколько виртуальных таблиц в одну.
Есть такой хак, но насколько он применим в твоем случае тебе лучше знать. А хак прост как топор:
class IBar1 {};
class IBar2: public IBar1 {}
class IBar3: public IBar2 {}
...
class Bar: public IBarN
{
Impl;
}
...
PROFIT
Нормальный компилятор в этом случае должен сделать только лишь один указатель на ТВМ класса.
Хотя тут private/protected наследование может быть лучше, но это от ситуации зависит.