Во-первых, интерфейсы на самом деле не являются родной концепцией для C ++.Я уверен, что большинство программистов знают, что они, но компилятор не знает, и именно здесь вы сталкиваетесь с проблемами.C ++ может делать много вещей, и я готов поспорить, что вы можете превратить его в множество разных языков, но если вы собираетесь писать C ++, лучше всего делать так, как C ++.
ДругойДело в том, что здесь много серой зоны.Что, если у вас был «интерфейс», как вы предложили, но кто-то сделал одно из них:
// Technically not a member function, but still changes the behavior of that class.
bool operator==(const Interface &left, const Interface &right);
Я почти на 100% уверен, что вы не можете помешать кому-то сделать это.
Вы можете быть в состоянии убедиться, что нет переменных-членов, хотя я не уверен, что согласен с таким способом ведения дел.Создайте пустой класс, а затем выполните static_assert(sizeof(InterfaceClass) == sizeof(Empty))
.Я не уверен, можно ли предположить, что размер равен 0 - это вопрос для кого-то более знакомого со стандартами.