Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Оформление реализации класса


Автор: Хоббит 12.1.2012, 09:38
Создаем мы некоторый класс. Его объявление.

Код

namespace my
{
  template <typename T>
  class Vector
  {
  public:
    Vector();
    ~Vector();
    void insert(const T &item);
    ...
  }


А теперь реализация
Код

namespace my
{
  template <typename T>
  Vector<T>::Vector() {...};

  template <typename T>
  Vector<T>::~Vector() {...};

  tempate <typename T>
  Vector<T>::itsert(const T &item) {...};
  ...
}


А теперь вопрос. Одному мне не нравится в реализации 
1. Необходимость постоянно повторять template <typename T> Vector<T> ...
2. Отсутствие наглядной структуры класса (не ясно какой метод public, какой private 

Я конечно понимаю, что объявлять отдельно интерфейс это хорошо и то-то определение методом можно и в класс втроить, но это не очень хорошо.

Но все же. Может есть какие-то способы "оформления" реализации, чтобы она была более понятной.

Автор: boostcoder 12.1.2012, 10:09
реализацию шаблонных(и не только) классов всегда пишу прям в декларации.

Автор: xvr 12.1.2012, 13:26
Цитата(Хоббит @  12.1.2012,  09:38 Найти цитируемый пост)
Я конечно понимаю, что объявлять отдельно интерфейс это хорошо и то-то определение методом можно и в класс втроить, но это не очень хорошо.

Если учесть, что для шаблонного класса вам все равно придется (прямо или косвенно) включить все тела методов в хидер, то описание методов прямо в теле класса (только для шаблонных классов!) выглядит вполне нормально

Автор: borisbn 12.1.2012, 13:50
Цитата(Хоббит @  12.1.2012,  09:38 Найти цитируемый пост)
Одному мне не нравится в реализации 
1. Необходимость постоянно повторять template <typename T> Vector<T> ...
2. Отсутствие наглядной структуры класса (не ясно какой метод public, какой private 

1. Мне тоже не нравится
2. Почему же ? Как раз для наглядности (!!!) и делается разделение на объявление и реализацию.

Я, например, частенько разбиваю на 2 файла (*.h и *.hpp). В *.h делаю объявление и инклюдаю соответствующий *.hpp, в котором и делаю реализацию. Во-первых, *.h-ник легко читается, во-вторых в *.cpp-ник (или в другой *.h-ник) инклюдается только маленький, простенький и понятный *.h.
ИМХО - нормальный подход

Автор: mes 12.1.2012, 14:43
Цитата(borisbn @  12.1.2012,  12:50 Найти цитируемый пост)
инклюдается только маленький,

как это только ?!


Автор: borisbn 12.1.2012, 14:44
Цитата(mes @  12.1.2012,  14:43 Найти цитируемый пост)
как это только ?!


Цитата(borisbn @  12.1.2012,  13:50 Найти цитируемый пост)
В *.h делаю объявление и инклюдаю соответствующий *.hpp


Автор: boostcoder 12.1.2012, 19:25
Цитата(borisbn @  12.1.2012,  13:50 Найти цитируемый пост)
Я, например, частенько разбиваю на 2 файла (*.h и *.hpp). В *.h делаю объявление и инклюдаю соответствующий *.hpp, в котором и делаю реализацию.

аналогично. но .hpp и .impl smile

Автор: spyswamp 12.1.2012, 20:37
Та же фигня, но *.h/*.hpp + *.inl smile

Если нетрудно, то расскажите, откуда взяли h+hpp (именно такая связка, отдельный hpp - это, обычно, хидер C++, но больше дело вкуса) и impl (что-то новенькое)? smile 

Автор: boostcoder 12.1.2012, 21:15
наверное это последствия какой-то дисциплины программирования.
так, к примеру, есть проекты в которых используются расширения .cxx/.hxx, .cc/.hh, .C/.H

Цитата(spyswamp @  12.1.2012,  20:37 Найти цитируемый пост)
impl (что-то новенькое)?

от implementation.

Автор: spyswamp 12.1.2012, 22:59
boostcoder, спасибо, кэп. smile Где-то подобрал или сам придумал? Меня вот что интересовало.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)