Как утверждать, что у определенного класса нет указателей vtbl в его макете?
У меня есть простой класс RAII, чтобы убедиться, что некоторая ручка правильно утилизирована. Теперь я хотел бы утверждать, что никто не собирается случайно добавлять к нему какие-либо виртуальные методы. Как я вижу это, мне нужно утверждать, что класс не имеет указателя vtbl.
Как я могу это сделать? Можно ли утверждать в момент компиляции?
ИЗМЕНИТЬ
Я соглашусь на компиляторы для настольных компьютеров. Насколько я знаю, нет компиляторов рабочего стола С++, которые не используют vtbl для реализации полиморфизма.
Ответы
Ответ 1
Если у вас есть библиотека С++ 11, вы можете использовать std::is_polymorphic<T>
:
Если T является полиморфным классом (то есть классом, который объявляет или наследует хотя бы одну виртуальную функцию), обеспечивает постоянное значение члена равным true. Для любого другого типа значение равно false.