После прочтения этой статьи: Использование интерфейсов в C ++
Я решил использовать ключевое слово __interface
с макросом, который будет добавлять виртуальные деструкторы, как описано в приведенной выше ссылке.
Я был рад, что ключевое слово __interface
заставит компилятор применять правила интерфейса, но я был разочарован, когда взял его для тест-драйва ... Оказывается, ключевое слово __interface
не применяет правило что метод в интерфейсе не должен содержать тело метода.
Конечно, я могу добавить макрос для методов функций, но я не хочу этого делать. У кого-нибудь есть другие предложения?
РЕДАКТИРОВАТЬ : переносимость не проблема для меня, потому что я должен скомпилировать как для Windows, так и для Linux, поэтому я буду использовать ключевое слово __interface
, когда я нахожусь на Windows, а не на Linux, это будет для обеспечения соблюдения приведенных ниже правил , которые не могут быть реализованы через абстрактный базовый класс :
- Может наследовать от нуля или более базовых интерфейсов.
- Может содержать только публичные, чисто виртуальные методы.
- Не может содержать данные членов; свойства разрешены.
- Невозможно наследовать от базового класса.
- Не может содержать конструкторы, деструкторы или операторы.
- Не может содержать статические методы.
Помимо проблемы с деструктором, которая может быть решена, можно увидеть преимущество использования этого ключевого слова в Windows env.