Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: inline функции или методы класса  (Прочитано 12998 раз)
0 Пользователей и 1 Гость смотрят эту тему.
acc15
Гость
« : 23-06-2006 18:55 » 

Метод 1:
Файл test.h
Код:
class X
{
  ... // some members
  void do_some_simple_action();
};

Файл test.cpp
Код:
inline void X::do_some_simple_action()
{
   ...
}

Метод 2:
Файл test.h
Код:
class X
{
  ... // some members
  void do_some_simple_action() { ... }
};

Метод 3:
Файл test.h
Код:
class X
{
  ... // some members
  void do_some_simple_action();
};

inline void X::do_some_simple_action()
{
   ...
}

Из них рабочие это метод 2 и 3... При использовании метода 1 линкер выдал ошибку "unresolved external function".

Вопрос: собственно почему не работает 1ый метод? Если так положено по стандарту, то грамотно ли писать реализацию функции(ий) в теле определения класса? не возникнут ли из-за этого лишние задержки при компиляции?

Или по-другому - как разделают inline функции и не-inline настоящие специалисты работающие с C++ уже более 10 лет??
Просто пишут весь код методов вместе с объявлением класса не заботясь о том что inline, а что нет, отдавая эту задачу компилятору? Если да, то грамотно ли писать программы большая часть кода которой содержится в заголовочных файлах, грамотно ли это?
Или как-то иначе: к примеру inline методы в объявлении, не-inline в cpp?
« Последнее редактирование: 23-06-2006 19:08 от acc15 » Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 23-06-2006 19:06 » 

Инлайн-методы должны быть целиком определены в том же файле, что и класс. Это логический вывод: как другие модули, использующие данный класс, будут компилировать inline, если тела ф-ии нет?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
acc15
Гость
« Ответ #2 : 23-06-2006 19:11 » 

Об этом я собственно уже догадался
Больше интересует вопрос оформления...
« Последнее редактирование: 23-06-2006 19:16 от acc15 » Записан
Anchorite
Гость
« Ответ #3 : 24-06-2006 03:47 » 

Инлайн-методы должны быть целиком определены в том же файле, что и класс.

Это не совсем так. Тело подставляемой функции можено определить в отдельном файле, который потом включить в заголовок при помощи #include. Так, например, сделано в MFC (inl-файлы).
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 24-06-2006 08:30 » 

Anchorite, логично - это ж заголовки. Главное, что не в другом модуле.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
LP
Помогающий

ru
Offline Offline

« Ответ #5 : 04-07-2006 12:09 » 

Цитата
Вопрос: собственно почему не работает 1ый метод?
Потому что определение inline-функции должно быть доступно в каждой единице трансляции, где используется, по стандарту.
Цитата
Если так положено по стандарту, то грамотно ли писать реализацию функции(ий) в теле определения класса? не возникнут ли из-за этого лишние задержки при компиляции?
"Лишние" задержки по сравнению с чем? Другого выбора нету. Вынести в отдельный модуль не получится.

Какой из этих вариантов лучше - определение внутри класса, вне класса (но в *.h файле) или в .inl файле - по-моему, это дело вкуса.
Записан

Если эта надпись уменьшается, значит ваш монитор уносят
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines