Здравствуйте, Seigram, Вы писали:
S>1. Не ожидал такого обилия ответов и советов
А теперь их прочитайте. Причём особенно внимательно не те, что кричат «да, конечно можно!», а те, которые объясняют, почему так делать нельзя, чем это грозит и как сделать, чтобы было можно.
S>2. Многие просто не захотели заметить
что я категорически НЕ могу шевелить кучу.
Решения без кучи предлагали. Заведите в мутирующем классе сырой буффер достаточного размера с запасом на выравнивание (char[...]), указатель на интерфейс и потом pimpl=new(area)T. Обязателен статический или динамический assert.
S> И плодить инстанции реализаций тоже не могу заранее.
Если у вас в производных классах добавляются новые члены-данные, то фейл очевиден. Если используются только данные из исходного мутирующего класса (или их вообще нет), то для чистых стратегий без данных достаточно одного инстанса на класс (и содержать он будет только VPTR). Код шаблона, хакающего VPTR, будет больше.
S>Но терзают сомнения — на всех ли компиляторах это прокатит ?..
Как уже говорили выше, могут быть проблемы при инициализации (указатели на разные классы могут не совпадать, выравнивание, размер), использовании (статическая девиртуализация или кеширование в рантайме), удалении (дефолный деструктор может делать неожиданные вещи). Поэтому не делайте так.