Забавно, что вы должны спросить на этой неделе, потому что я случайно прочитал статью, написанную в 2015 году о "стирании типа удаления" .
В нем предлагается универсальный c интерфейс для классов, которые обертывают что-то вроде void*
, поддерживая современное использование C ++ с категориями const-correctness и lvalue / rvalue. Вы можете попробовать, если вы реализуете свое собственное стирание типов.
Что касается классов стирания, они обычно работают лучше, чем ваш простой код, но сложно получить 100% верно, как вы нашли. Классы типа any
, variant
и function
обычно выполняют свою работу, но с некоторыми грубыми краями. Вот что побудило меня написать статью, но мотивировать других принять ее - это другое дело!