Почему интерфейс Visual C ++ не может содержать операторы? - PullRequest
4 голосов
/ 08 января 2010

Согласно документу MSDN на __interface , интерфейс Visual C ++ "Не может содержать конструкторы, деструкторы или операторы."

Почему интерфейс не может содержать оператор? Есть ли такая большая разница между методом get, который возвращает ссылку:

SomeType& Get(WORD wIndex);

а перегружен оператор индексатора?

SomeType& operator[](WORD wIndex);

Ответы [ 3 ]

8 голосов
/ 08 января 2010

Модификатор __interface - это расширение Visual C ++, помогающее реализовать COM-интерфейсы. Это позволяет вам указать «интерфейс» COM и применять правила интерфейса COM.

И поскольку COM является C-совместимым определением, у вас не может быть операторов, Ctor или Dtors.

1 голос
/ 08 января 2010

Интерфейсы не могут содержать операторы, поскольку операторы не могут быть виртуальными функциями. По существу, интерфейсы - это базовые классы, от которых происходят другие классы.

Редактировать: Прочитав комментарии и подумав об этом, я понял, насколько это глупо. Пожалуйста, прости мои нетерпеливые пальцы. Операторы ничем не отличаются от любой другой функции. Более вероятная причина связана с генерирующими классами __interface, которые являются производными от общего базового класса, и необходимостью для dll иметь все конструкторы, деструкторы и операторы присваивания, которые они используют локально.

1 голос
/ 08 января 2010

Это похоже на DLL. Вам нужно имя метода, чтобы вы могли использовать его на других языках, которые не поддерживают перегрузку операторов, например C.

...