Обзор шаблонов C++: использование структур с чистыми виртуальными методами вместо интерфейсов
Я только начал изучать C++, исходя из опыта работы с C# и Java.
Мне нравится использовать интерфейсы в своем коде. В C++, хотя они не существуют, поэтому вместо этого я создаю структуры с чистыми виртуальными методами.
Мои вопросы таковы:
1) из того, что я понимаю, нет никакой разницы между struct и class, кроме метода доступа по умолчанию, но это обычное место, чтобы увидеть struct используется, когда класс имеет меньший размер. Поэтому я решил в качестве соглашения использовать struct при написании интерфейсов, поскольку способ, которым struct рассматривается программистами, больше напоминает интерфейс. Существуют ли какие-либо другие конвенции по этому вопросу, или моя конвенция плоха или может каким-либо образом вызвать путаницу?
2) поскольку интерфейс имеет только чистую виртуальность и не обеспечивает никакой реализации (в большинстве случаев методы по умолчанию теперь являются вещью в Java), я подумал, что было бы логично сделать для него только заголовочный файл, а не создавать как файл .cpp, так и файл .h. Поскольку предполагается, что файл .cpp имеет реализацию, а файл.h должен иметь прототипы методов. Опять же, существуют ли какие-либо другие конвенции по этому вопросу, или моя конвенция плоха или может каким-либо образом вызвать путаницу?
Пример:
ISayHello.х
struct IRender { virtual void render() = 0; }
ImplementationExample.cpp
class Sprite : public IRender { public: void render() override { //code goes here } }
Что я уже пробовал:
Примечание: мое намерение состоит в том, чтобы узнать мнение тех, у кого больше опыта, о том, как работает мой паттерн, есть ли у него проблемы и есть ли какая-либо другая конвенция по этому вопросу, которую рассматривает моя конвенция. Если вы считаете, что вопрос не по теме, я был бы признателен, если бы вы могли перенаправить меня в лучшее место, чтобы задать свой вопрос. Этот вопрос, например, был помечен как не по теме на Code Review Stack Exchange, хотя, на мой взгляд, запрос на проверку шаблона, который вы используете в своем коде, не является не по теме.
[no name]
Если вы хотите обсудить свой код, возможно, вам следует опубликовать его на дискуссионных форумах.
Member 12832832
Тогда ладно. Спасибо за совет.
Richard MacCutchan
Кажется, вполне разумный вопрос. Однако я никогда не использовал такие шаблоны в C++, поэтому не могу действительно высказать свое мнение. Возможно, Вам понравится смотреть на Домашняя страница Бьярне Страуструпа[^], так как он является создателем C++.
Rick York
Я думаю, что это подходящее место для обсуждения вашего кода. Гостиная определенно не место для этого.
Jochen Arndt
Форум C++ действительно может быть лучшим местом для этого, потому что нет единого соглашения, и это скорее дискуссионная тема, чем вопрос, на который можно просто ответить (но здесь он не выходит за рамки темы).
Ответ может заключаться в том, что вы можете делать все, что хотите. В крупных компаниях могут существовать соглашения или правила о том, как писать исходный код C++.
Я использую структуры в C++ только как в C в качестве простых классов хранения данных и использую классы, когда есть функции-члены. Но это мое личное мнение.
Использование заголовочного файла только для простых классов является обычным делом, и я тоже их использую.