|
inline методы классов |
|
|
|
May 28 2009, 12:15
|
Профессионал
    
Группа: Участник
Сообщений: 1 040
Регистрация: 3-01-07
Пользователь №: 24 061

|
Здравствуйте! WinAVR. Пишем класс. Большинство его методов очень простые и маленькие. Хотим сделать эти методы inline. Причём класс ДОЛЖЕН БЫТЬ описан в .h файле, а реализация методов ДОЛЖНА БЫТЬ ВЫПОЛНЕНА в .cpp файле. Не спрашивайте почему  Т. е., трудность - разделение описания класса и определения его inline методов на два файла. Код ниже - правильная реализация inline методов класса? Может быть они должны быть реализованы или строго в теле класса (по-умолчанию уже inline) или вне класса, но с указанием спецификатора доступа и обязательно в .h файле? qwe.h Код class qwe { public: inline void f(void); }; qwe.cpp Код void qwe::f(void) { // что-то }; Благодарю заранее!
--------------------
Благодарю заранее!
|
|
|
|
|
 |
Ответов
|
May 28 2009, 22:17
|

читатель даташитов
   
Группа: Свой
Сообщений: 853
Регистрация: 5-11-06
Из: Днепропетровск
Пользователь №: 21 999

|
В принципе, простой класс вообще может быть целиком описан в .h файле. Впрочем, практика на любителя. Еще имейте в виду - компилятор обычно инлайнит только очень короткие функции, вроде такой: Код inline unsigned int getUsedCount( void ) { return qty; } Функции подлиннее делает вызываемыми, причем уже в конкретном объекте компиляции, если объектов несколько, функция будет в каждом... Тут, конечно, много зависит от компилятора и его настроек. Возможно, придется пользоваться директивами вроде Код #pragma inline=forced
|
|
|
|
|
May 29 2009, 11:09
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(HARMHARM @ May 29 2009, 06:54)  Не совсем понятно, почему линкер не ругается на одинаковые символы в этом случае? Потому что их имена экспортируются не директивой PUBLIC, а директивой PUBWEAK (можно почитать в описани на ассемблер), которая как раз для таких случаев и придумана. Ну или компилятор генерит аналогичные признаки в объектном коде. Еще одно применение этой директивы, которым вы наверняка пользуетесь - putchar(). Библиотечный экспортируется с PUBWEAK (это видно, если посмотреть список символов библиотеки при помощи xlib), а ваш - с PUBLIC.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
Сообщений в этой теме
n_bogoyavlensky inline методы классов May 28 2009, 12:15 IgorKossak Цитата(n_bogoyavlensky @ May 28 2009, 15... May 28 2009, 12:24 n_bogoyavlensky Цитата(IgorKossak @ May 28 2009, 15:24) И... May 28 2009, 12:26  IgorKossak Цитата(n_bogoyavlensky @ May 28 2009, 15... May 28 2009, 13:05 Harbour Страуструп: "Чтобы реализация вызова подстано... May 28 2009, 19:37     sergeeff Цитата(HARMHARM @ May 30 2009, 12:58) Нем... May 30 2009, 11:22      HARMHARM Цитата(sergeeff @ May 30 2009, 14:22) Воп... May 30 2009, 11:55 alx2 Цитата(n_bogoyavlensky @ May 28 2009, 17... May 29 2009, 11:10 sergeeff Про inline уже неоднократно писалось на форуме.
1.... May 29 2009, 15:17 Сергей Борщ Цитата(sergeeff @ May 29 2009, 18:17) 3. ... May 29 2009, 16:58 sergeeff Ну да, правильнее сказать, что везде, кроме самого... May 29 2009, 17:20 sergeeff Сами же и отвечаете на поставленный вопрос. Эффект... May 30 2009, 18:26
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|